我在appdelegate中用于后台提取的代码永远不会完全运行。我打开了后台提取选项并更新了plist。
我按下Debug>触发代码。模拟后台提取
这是代码
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请求并返回数据(我检查了服务器并发送了呼叫),但是,应用程序似乎暂停在(// GETS HERE) getNotifications调用,所以其余的后台提取代码(//更新通知标记计数)永远不会运行。
代码似乎超时了。我应该得到30秒,但似乎超过5秒或者什么时候。
知道为什么不执行该部分代码?
注意:如果我手动重新打开应用程序,则执行其余代码。
答案 0 :(得分:1)
performFetch
有一个名为completionHandler
的传入函数。您必须调用该函数来完成提取并停止倒计时时钟。你没有这样做,因此你超时,应用程序被暂停。