ios";在允许的时间之外有活动断言:“quot;异步任务崩溃

ios";在允许的时间之外有活动断言:“quot;异步任务崩溃,ios,multithreading,nsurlconnection,grand-central-dispatch,Ios,Multithreading,Nsurlconnection,Grand Central Dispatch,我有时会在我的“今日”小部件中出现崩溃“myApp在允许的时间之外有活动断言”。经过一些谷歌搜索,我猜这是因为我处理后台任务不当造成的 我使用两种类型的后台任务。调度异步和NSURLConnection。我是个新手,不知道哪一个是问题所在。(已经有很多问题和答案,但我找不到适合我的情况的) 下面是我的代码的缩写版本 override func viewDidLoad() { super.viewDidLoad() loadData() }

我有时会在我的“今日”小部件中出现崩溃“myApp在允许的时间之外有活动断言”。经过一些谷歌搜索,我猜这是因为我处理后台任务不当造成的

我使用两种类型的后台任务。调度异步和NSURLConnection。我是个新手,不知道哪一个是问题所在。(已经有很多问题和答案,但我找不到适合我的情况的)

下面是我的代码的缩写版本

    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
    }
总结一下我的意图:

  • 在viewDidLoad上,调用loadData()
  • 在loadData()中,我使用了dispatch_async,因为我想在加载数据时应该使用与主线程不同的线程
  • 在异步线程中,我调用readData(),从而调用NSURLConnection。(我调用sendSynchronousRequest,因为我认为SynchronousRequest是可以的,因为它已经在dispatch\u async中调用了)
  • 要在加载完成后刷新UI,我调用refreshUI()
  • 它能工作,但有时会崩溃…我的想法错了吗

    感谢您的帮助


    谢谢

    将工作封送到后台线程并不意味着同步发出请求是个好主意。您应该使用
    NSURLSession
    的异步API,然后在应用程序进入后台(或被要求终止)时取消请求。使用异步API需要更多的工作,但更正确
    dispatch\u async
    不一定是一个足够的“适配器”。

    这些是看门狗超时崩溃报告,您可以通过臭名昭著的“吃坏食物”(0x8badf00d)异常代码来识别。有关如何破译崩溃日志和潜在解决方案的更多信息,请访问:


    您是否建议我放弃dispatch_async,而只使用NSURL asynchronous?或者我应该使用dispatch_async和NSURL asynchronous吗?如果您使用
    NSURLSession
    async API,您应该不再需要使用
    dispatch_async