【问题标题】:Cant segue new facebook auth user with Parse无法使用 Parse 搜索新的 facebook auth 用户
【发布时间】: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


【解决方案1】:

试试这个。您必须在主线程上执行 AFAK,这就是它崩溃的原因:

dispatch_async(dispatch_get_main_queue()) { self.performSegueWithIdentifier("newUserSegue", sender: self) }

【讨论】:

    【解决方案2】:

    这里的问题是我在里面运行另一个后台任务

    PFFacebookUtils.logInInBackgroundWithReadPermissions

    解决方案是向User.updateUserInfo() 添加一个完成处理程序并在其中执行segue。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 2016-04-14
      相关资源
      最近更新 更多