我调用Facebook Graph API来获取通过Facebook登录我的应用程序的用户的电子邮件,Facebook ID和名称。
我成功获取了信息;我现在正在尝试使用调度组,因此调用图形的函数会等到图形API调用完成后再返回。图形请求是异步的。
我无法弄清楚此代码锁定的原因。
1)创建一个调度组
2)输入所述显示组
3)一旦检索到信息或发现错误,就离开小组
4)等待小组离开,然后返回
似乎我的调度组输入没有正确调用,但我无法弄清楚原因。
class func getFBInformation()->Bool {
var fbResult = false
let fbGraphGroup = DispatchGroup()
fbGraphGroup.enter()
FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { (connection, result, err) in
if err != nil {
fbResult = false
print("Pre Error Signal")
fbGraphGroup.leave()
return
}
if let resultDict = result as? [String:AnyObject] {
<Do things with graph results>
print("Pre success signal")
fbResult = true
fbGraphGroup.leave()
}
}
fbGraphGroup.wait()
print("Post signal")
return fbResult
}
答案 0 :(得分:1)
怎么会有效? 首先进入组,然后在主线程上等待完成处理程序,直到它离开组。但是完成处理程序无法在主线程上执行以便能够离开组。
据我所知,您的完成处理程序由API在主队列上调度。没有必要使用任何其他类型的同步。