iOS:为什么获取后台功能从未完全执行?

时间:2016-07-30 02:32:39

标签: ios swift

我在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秒或者什么时候。

知道为什么不执行该部分代码?

注意:如果我手动重新打开应用程序,则执行其余代码。

1 个答案:

答案 0 :(得分:1)

performFetch有一个名为completionHandler的传入函数。您必须调用该函数来完成提取并停止倒计时时钟。你没有这样做,因此你超时,应用程序被暂停。