CoreData多线程正确存储删除

时间:2011-07-21 11:14:22

标签: objective-c multithreading core-data

好的,这是我的情况:

我有一个需要用户帐户的应用。 当您正在编写新注释,创建新帖子或读取线程等内容时,对服务器的每次调用都在单独的线程上运行。 更具体地说:创建一个新线程,调用服务器,从服务器获取答案并将答案中的项目保存到Core Data Store。

为了做到这一点,每个线程都创建自己的insertContext,但它们都共享同一个storeCoordinator。

但是有一个问题: 当有人从他的帐户注销时,我必须删除商店, 因此,如果他使用其他帐户登录,则其他帐户中的内容不再位于coreDataStorage中。

但是为了删除商店,我必须确保没有任何后台线程运行,因为一旦他们试图保存他们的东西,他们肯定会崩溃应用程序,因为商店不是' t有效了。 澄清一下:这些背景线程是NSOperations,它们放在NSOperationQueue中并从那里执行。

现在CoreData为NSOperationQueue提供了一个名为“cancelAllOperations”的函数,但是根据文档,运行的操作不会被杀死,而只会发送取消消息... 如何使用此取消消息o_O 到目前为止,我正在检查我的线程是否被取消,如果是,我不执行其他的东西,但如果我做的事情如下:

NSError *saveError = nil;
if(!self.isCanceled)
  [insertionContext save:&saveError];

在if-check和save之间仍有可能取消线程。

所以我的问题: 我该如何妥善处理?是否正确取消线程的问题?

1 个答案:

答案 0 :(得分:0)

我认为你不应该取消任何操作,因为它不会立即杀死线程。为什么不管理当前正在执行的所有操作?这样,您可以推迟持久存储删除,直到所有任务完成(如果没有正在进行的操作,则立即删除它)。