2016-07-30 39 views
0

我在appdelegate中進行後臺提取的代碼從未完全運行。我打開了後臺提取選項並更新了plist。iOS:爲什麼抓取背景函數從未完全執行?

我按調試觸發代碼>模擬背景抓取

這是代碼

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
     User.getNotifications(User.getUserDetails()["id"].string!, callback: {(notifications) in 
      //update notification badge count 
      notificationBadgeCount = X 
     }) 
} 

'User.getNotifications' 看起來像這樣

getNotifications(id: String, callback...){ 
    alamofire.request(.GET....){ jsonResponse in 
     //GETS HERE 
    callback(jsonResponse) 
    } 

} 

當觸發模擬背景獲取,alamofire GET請求被髮送並且數據被返回(我已經檢查了服務器並且發送了呼叫),但是,該應用似乎暫停在ge中的(// GETS HERE) t通知調用,所以剩下的代碼在後臺獲取(//更新通知標誌計數)永遠不會運行。

該代碼似乎超時。我應該得到30秒,但它似乎超過5秒或什麼東西。

任何想法爲什麼這段代碼沒有執行?

注意:如果我手動重新打開應用程序,則執行其餘代碼。

+0

你沒有對你的'completionHandler'做任何事情。 – jtbandes

回答

1

performFetch有一個名爲completionHandler的傳入函數。您必須調用該函數才能完成提取並停止倒數計時。你沒有這樣做,你因此超時,應用程序被暫停。

+0

似乎代碼將不會執行沒有它,謝謝! – google1254