【发布时间】:2015-07-25 03:59:40
【问题描述】:
我正在使用 facebook API 和 Parse 的应用程序下注册新用户。正在创建用户而无需转到另一个视图。不幸的是,如果我尝试继续查看下一个视图,则创建的用户没有姓名和电子邮件信息。我知道这在后台运行,所以我需要一个解决方案来知道执行何时完成。有什么想法吗?
override func viewDidLoad() {
FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
}
override func viewDidAppear(animated: Bool) {
if let access = FBSDKAccessToken.currentAccessToken() {
PFFacebookUtils.logInInBackgroundWithAccessToken(access, block: {
(user: PFUser?, error: NSError?) -> Void in
if user != nil {
println("already registred user")
self.performSegueWithIdentifier("firstView", sender: self)
} else {
println("Uh oh. There was an error logging in.")
}
})
}
}
@IBAction func fbLoginButtonTouchUpInside (sender: AnyObject) {
PFFacebookUtils.logInInBackgroundWithReadPermissions(["public_profile", "email", "user_friends"], block: { (user, error) in
if let user = user {
User.updateUserInfo()
println("new user")
//THIS SEGUE IS CRASHING
self.performSegueWithIdentifier("newUserSegue", sender: self)
} else {
println("Uh oh. The user cancelled the Facebook login.")
}
})
}
【问题讨论】:
-
由于你的 segues 在闭包中,它们应该只在任务完成并且结果在闭包中可用后才被调用。我对您的代码注释“//This SEGUE IS CRASHING”感到困惑 - 您收到什么错误消息?
-
它的连续性。但是使用 segue 它不会保存新的用户数据。没有错误消息。关键是如何知道任务何时完成?
-
任务在闭包中的代码执行之前完成,这就是闭包如何知道任务是否成功或对象是否不为零的方式。您知道任务已完成,因为您被分配了一个用户 = 用户的常量。您的问题应该是更多关于如何发出 Facebook Graph API 请求以获取人的姓名和电子邮件并使用该信息更新解析用户。
-
好吧,我想我不是很清楚。 - 没有 Segue:用户被创建并保存到 Parse WITH 电子邮件和名称 - 使用 Segue:用户被保存到 Parse WITHOU 电子邮件和名称。让我这样说:我应该在代码中的哪个位置执行SegueWithIdentifier?
-
什么是 User.updateUserInfo() ?如果这产生了另一个后台任务,那么您应该向它添加一个完成处理程序并在其中执行 segue。
标签: ios facebook parse-platform