3

我想实现一个大型数据集的 UI 响应式下载和解析,并使用 Core Data 保存它。

我的设置:

我在自定义视图控制器中显示下载的内容。我不使用 NSFetchedResultsController。

有 3 个 MOC:

  1. masterMOC(负责保存到磁盘,NSPrivateQueueConcurrencyType)
  2. mainMOC(由 UI 使用,NSMainQueueConcurrencyType,masterMOC 的子级)
  3. backgroundMOC(负责从 JSON 导入,在单独的线程中创建,masterMOC 的子线程)

我正在分批导入 - 每 50 个项目我通过以下方式执行 MOC 保存:

NSError *error;
[backgroundMOC save:&error];
NSManagedObjectContext *masterMOC = backgroundMOC.parentContext; //set during initialization               
[masterMOC performBlock:^{
    NSError *parentContextError = nil;
    [masterMOC save:&parentContextError];
}];

我希望在保存 masterMOC 后对 mainMOC 进行更改。如果我在 masterMOC 保存时尝试访问随机托管对象的某些关系(保存需要一些时间),UI 会挂起,直到保存完成。

问题:如何避免masterMOC保存时UI冻结?

4

1 回答 1

0

您的问题可能是数据存储在您写入数据时被阻塞。因此,要么使数据存储非阻塞(在您的情况下这可能或不可能),或者如果不可行,则使访问器非阻塞。在后一种情况下,GUI 不会挂起,但在访问结果返回之前它也不会更新。

于 2013-01-15T15:41:48.777 回答