ios";在允许的时间之外有活动断言:“quot;异步任务崩溃
我有时会在我的“今日”小部件中出现崩溃“myApp在允许的时间之外有活动断言”。经过一些谷歌搜索,我猜这是因为我处理后台任务不当造成的 我使用两种类型的后台任务。调度异步和NSURLConnection。我是个新手,不知道哪一个是问题所在。(已经有很多问题和答案,但我找不到适合我的情况的) 下面是我的代码的缩写版本ios";在允许的时间之外有活动断言:“quot;异步任务崩溃,ios,multithreading,nsurlconnection,grand-central-dispatch,Ios,Multithreading,Nsurlconnection,Grand Central Dispatch,我有时会在我的“今日”小部件中出现崩溃“myApp在允许的时间之外有活动断言”。经过一些谷歌搜索,我猜这是因为我处理后台任务不当造成的 我使用两种类型的后台任务。调度异步和NSURLConnection。我是个新手,不知道哪一个是问题所在。(已经有很多问题和答案,但我找不到适合我的情况的) 下面是我的代码的缩写版本 override func viewDidLoad() { super.viewDidLoad() loadData() }
override func viewDidLoad() {
super.viewDidLoad()
loadData()
}
func loadData(){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0) ) {
dispatch_async(dispatch_get_main_queue()){
self.actInd.startAnimating()
}
var pageSource=self.dpm.readData("https://url.com")
dispatch_async(dispatch_get_main_queue()){
self.refreshUI()
self.actInd.stopAnimating()
}
}
}
func refreshUI(){
//refresh UI
}
func readData(url:String)->NSData?{//This method is in a separate class. dpm
var myUrl=NSURL(string: url)
var request:NSMutableURLRequest=NSMutableURLRequest(URL: myUrl!)
request.timeoutInterval=30
let myHTMLData = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
return myHTMLData
}
总结一下我的意图:
谢谢 将工作封送到后台线程并不意味着同步发出请求是个好主意。您应该使用
NSURLSession
的异步API,然后在应用程序进入后台(或被要求终止)时取消请求。使用异步API需要更多的工作,但更正确dispatch\u async
不一定是一个足够的“适配器”。这些是看门狗超时崩溃报告,您可以通过臭名昭著的“吃坏食物”(0x8badf00d)异常代码来识别。有关如何破译崩溃日志和潜在解决方案的更多信息,请访问:
您是否建议我放弃dispatch_async,而只使用NSURL asynchronous?或者我应该使用dispatch_async和NSURL asynchronous吗?如果您使用
NSURLSession
async API,您应该不再需要使用dispatch_async
。