2017-06-03 37 views
0

我打电话Facebook的图形API来获取登录到通过Facebook我的应用程序的用户的电子邮件,Facebook的ID和名称。调度队列的异步Web服务调用

我成功获取信息;我现在试图使用调度组,以便调用图的函数在返回之前等待图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 
} 

回答

1

它是如何工作的? 首先你进入组,然后你等待完成处理程序的主线程,直到它离开组。但是完成处理程序无法在主线程上执行以便能够离开组。

据我所知,你完成处理器被分派由API主队列。没有必要使用任何其他类型的同步。