iOS UI微调器在处理后台线程时冻结

时间:2016-09-16 09:26:11

标签: ios swift multithreading grand-central-dispatch

从我在Swift 2.0中的iOS应用程序中,我在后台线程中请求来自服务器的数据时显示自定义微调器动画。 一旦我获得数据并更新sqlite数据库(约15秒处理所有查询),微调器就开始冻结。在XCode中,设备cpu显示95%到100%之间的活动。 我尝试以不同的方式使用GRAND CENTRAL DISPATCH,但我没有找到如何在不冻结微调器动画的情况下使其工作。 知道如何解决这个问题吗? 谢谢!!

我无法发布整个代码,但它与此类似:

//Using the spinner here https://github.com/icanzilb/SwiftSpinner

Spinner.show("Please wait", animated: true)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0))
{

   //around 5 seconds to get data
   var data = getDataFromServer()

   //around 20 sec to process and save the data in sqlite. It stops spinning from here..
   saveDataInDB(data)

}

1 个答案:

答案 0 :(得分:0)

我发现了这个错误。在saveDataInDB()中,我正在使用OAuthSwift进行请求,该请求在接收回调时更改执行线程。它跳回主线程,然后db查询在主线程上运行。我在这里为这个问题开了一个新问题:OAuthSwift request callback on main thread