首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消NSManagedObjectContext performBlock

取消NSManagedObjectContext performBlock
EN

Stack Overflow用户
提问于 2014-01-27 11:59:10
回答 2查看 613关注 0票数 3

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

代码语言:javascript
复制
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吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-27 12:02:52

没有块和其他任何同步操作都不能隐式取消。

你必须给它编程才能被取消

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

票数 2
EN

Stack Overflow用户

发布于 2014-01-27 16:26:19

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21380296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档