iOS - Swift Facebook Graph 请求完成处理程序 - 表达式类型不明确,没有更多上下文
Posted
技术标签:
【中文标题】iOS - Swift Facebook Graph 请求完成处理程序 - 表达式类型不明确,没有更多上下文【英文标题】:iOS - Swift Facebook Graph Request completion handler - Type of expression is ambiguous without more context 【发布时间】:2016-02-12 19:53:43 【问题描述】:我正在尝试使这个 Facebook Graph 请求工作,但我收到两个错误:
-
无法将类型“(,,_) throws -> Void”的值转换为预期的参数类型“FBSDKGraphRequestHandler!” - 第 6 行
没有更多上下文,表达式类型不明确 - 第 14 行
这是我的 viewDidLoad() 代码:
override func viewDidLoad()
super.viewDidLoad()
let graphRequest = FBSDKGraphRequest(graphpath: "me", parameters: ["fields": "id, name, gender"])
graphRequest.startWithCompletionHandler(
(connection, results, error) -> Void in
if error != nil
print(error)
else if let result = results
PFUser.currentUser()?["gender"] = result["gender"]
PFUser.currentUser()?["name"] = result["name"]
try PFUser.currentUser()?.save()
let userId = result["id"] as! String
let facebookProfilePictureUrl = "https://graph.facebook.com/" + userId + "/picture?type=large"
if let fbpicUrl = NSURL(string: facebookProfilePictureUrl)
if let data = NSData(contentsOfURL: fbpicUrl)
self.profilePicture.image = UIImage(data: data)
let imageFile:PFFile = PFFile(data: data)!
PFUser.currentUser()?["image"] = imageFile
try PFUser.currentUser()?.save()
)
如果您对如何解决此问题有任何建议,如果您能告诉我,我们将不胜感激!谢谢。
【问题讨论】:
【参考方案1】:问题是您使用try
而不使用do-catch
。
let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, gender"])
graphRequest.startWithCompletionHandler (connection, results, error) -> Void in
if error != nil
print(error)
else if let result = results
PFUser.currentUser()?["gender"] = result["gender"]
PFUser.currentUser()?["name"] = result["name"]
do
try PFUser.currentUser()?.save()
catch let ex
print(ex)
let userId = result["id"] as! String
let facebookProfilePictureUrl = "https://graph.facebook.com/" + userId + "/picture?type=large"
if let fbpicUrl = NSURL(string: facebookProfilePictureUrl),
data = NSData(contentsOfURL: fbpicUrl)
self.profilePicture.image = UIImage(data: data)
let imageFile:PFFile = PFFile(data: data)!
PFUser.currentUser()?["image"] = imageFile
do
try PFUser.currentUser()?.save()
catch let ex
print(ex)
或者您可以使用try?
或try!
try? PFUser.currentUser()?.save()
但是使用save()
的方法不好选。它锁定当前线程。如果您需要确保成功保存或saveEventually
,则最好使用带有完成块的saveInBackground
。
顺便提一句。你的代码格式不是很好,真的很难阅读......
【讨论】:
以上是关于iOS - Swift Facebook Graph 请求完成处理程序 - 表达式类型不明确,没有更多上下文的主要内容,如果未能解决你的问题,请参考以下文章
Facebook 登录 Swift iOS 10 - 没有任何效果
Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)
Swift 中带有 Branch.io 的 Facebook AppInvites 示例
我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别