2017-06-03 40 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主隊列。沒有必要使用任何其他類型的同步。