我有一个URL调用URL,它以JSON格式返回我的数据,我解析它,然后我必须在我的Core Data上下文中加载它。
现在我在主线程上进行(解析 - 实体创建 - 提交),通过使用GCD(大中央调度)在主队列上调度块。 http调用是异步的,所以没关系,但数据库加载不是,所以它冻结了我的用户界面:一个由NSFetchedResultsController支持的UITableView。
我想做的是,在次要线程上完成这些最后的任务,但不知道如何!
我听说过有关创建第二个上下文的内容,在辅助线程上使用它,然后将其删除并“刷新”“主要”上下文,不知道如何解释。 也许有一个wwdc ed。关于这个论点的视频呢?我找不到有效的文件。
你能帮助我,以异步方式加载数据,所以我的表永远不会停止滚动吗?
答案 0 :(得分:1)
有一条规则:一个线程的一个上下文。在非主队列中创建新上下文并使用它。
为此上下文添加观察者:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(<#Selector name#>)
name:NSManagedObjectContextDidSaveNotification
object:<#A managed object context#>];
完成解析器并将对象置于上下文中后,保存将触发通知的上下文。在主队列中,捕获此通知并在主队列上下文调用- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification
。