facebook - Xcode7 swift函数需要多少时间?比赛条件?

标签 facebook swift xcode7

我的 Xcode 7 项目有一个关于 Facebook 的问题。 当尝试通过图形请求检索我的数据时,函数 returnUserData 完成得太晚了?

//...
returnUserData()
print("finished")
//...

这是函数:

func returnUserData() {
        let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"])
        graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
        if error == nil
            {
                //print("fetched user: \(result)")
                print("start");
                self.username = result.valueForKey("name") as! NSString
                //NSUserDefaults.standardUserDefaults().setObject(self.username, forKey: "name")
                //NSUserDefaults.standardUserDefaults().synchronize()
                print("1: " + (self.username as String))
            }
        else if (error != nil)
            {
                // Process error
                print("Error: \(error)")
            }
        })

    }

但这就是,发生了什么,看看顺序:

finished
start
1: My Name

如何防止这种情况发生?

最佳答案

那是因为 graphRequest.startWithCompletionHandler 调用是异步的。如果您在代码中的 returnUserData()print("finished") 处放置断点,您将在执行 graphRequest.startWithCompletionHandler 后看到,该函数将立即返回到 print("finished") 语句,并且完成处理程序中的语句不会执行(在调用 graphRequest.startWithCompletionHandler 之后立即执行)。

为了正确处理它,您可以在completionHandler中编写处理代码[例如:print("finished")],或者编写一个回调函数,您可以在之后将数据传递给该回调函数处理/验证服务器响应。

关于facebook - Xcode7 swift函数需要多少时间?比赛条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34099936/

相关文章:

facebook - 如何使用像素将产品添加到 Facebook 目录

swift - Post 在 Kitura 中将 Request Body 设为 nil

swift - 如何正确使用 UIView 和 drawRect() 在 playground 中自定义它?

xcode - 如何使用不同的构建配置设置 Xcode 项目依赖项?

objective-c - Facebook:[FBSession activeSession] 崩溃应用

django facebook 应用程序 : Testing with Test Users?

facebook - 获取 facebook 用户签到

ios - 子类化 UIButton 做一个圆,最后是一个矩形

java - iOS 中的事件总线等效项

swift - UITableView - 多选和单选