2016-07-30 69 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