从辅助线程写入核心数据

时间:2011-09-28 10:51:39

标签: multithreading uitableview core-data asynchronous nsfetchedresultscontroller

我有一个URL调用URL,它以JSON格式返回我的数据,我解析它,然后我必须在我的Core Data上下文中加载它。

现在我在主线程上进行(解析 - 实体创建 - 提交),通过使用GCD(大中央调度)在主队列上调度块。 http调用是异步的,所以没关系,但数据库加载不是,所以它冻结了我的用户界面:一个由NSFetchedResultsController支持的UITableView。

我想做的是,在次要线程上完成这些最后的任务,但不知道如何!

我听说过有关创建第二个上下文的内容,在辅助线程上使用它,然后将其删除并“刷新”“主要”上下文,不知道如何解释。 也许有一个wwdc ed。关于这个论点的视频呢?我找不到有效的文件。

你能帮助我,以异步方式加载数据,所以我的表永远不会停止滚动吗?

1 个答案:

答案 0 :(得分:1)

有一条规则:一个线程的一个上下文。在非主队列中创建新上下文并使用它。

为此上下文添加观察者: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(<#Selector name#>) name:NSManagedObjectContextDidSaveNotification object:<#A managed object context#>];

完成解析器并将对象置于上下文中后,保存将触发通知的上下文。在主队列中,捕获此通知并在主队列上下文调用- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification