取消NSManagedObjectContext performBlock

时间:2014-01-27 11:59:10

标签: objective-c core-data nsmanagedobjectcontext

我使用父/子并发模式导入大数据块。导入是在后台执行而不会阻塞主线程,如下所示:

NSManagedObjectContext *temporaryContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
temporaryContext.parentContext = mainMOC;

[temporaryContext performBlock:^{
   // import data …

   // push to parent
   NSError *error;
   if (![temporaryContext save:&error]) {
      // handle error
   }

   // save parent to disk asynchronously
   [mainMOC performBlock:^{
      NSError *error;
      if (![mainMOC save:&error]) {
         // handle error
      }
   }];
}];

一切都很好,但如果我需要取消数据导入怎么办?有没有办法取消performBlock?

2 个答案:

答案 0 :(得分:2)

否 - 无法隐式取消块和其他任何同步操作。

你必须将其编程为可取消

e.g。这里也许......将performBLock分成N个调用,每个调用只做很少的工作。

答案 1 :(得分:1)

如果其他人遇到同样的问题,我的解决方案是使用两个独立的托管对象上下文,这两个上下文都连接到同一个持久性存储协调器。执行繁重工作的托管对象上下文封装在NSOperation子类中。 NSOperation可以在任何时候取消。以下是Apple提供的示例的link

相关问题