【发布时间】:2011-07-21 11:14:21
【问题描述】:
好的,这是我的情况:
我有一个需要用户帐户的应用。 当您在编写新的 cmets、创建新的帖子或读取线程时,对服务器的每次调用都在单独的线程上运行。 更具体地说:创建一个新线程,调用服务器,从服务器获取答案并将答案中的项目保存到 Core Data Store。
为了做到这一点,每个线程都创建了自己的insertionContext,但它们都共享同一个storeCoordinator。
但是有一个问题: 当有人从他的帐户注销时,我必须删除商店, 因此,如果他使用其他帐户登录,则其他帐户中的内容不再存在于 coreDataStorage 中。
但是为了删除商店,我必须确保没有任何后台线程在运行,因为一旦他们尝试保存他们的东西,他们肯定会崩溃应用程序,因为商店是'不再有效。 澄清一下:这些后台线程是 NSOperations,它们被放入 NSOperationQueue 并从那里执行。
现在 CoreData 为 NSOperationQueue 提供了一个名为“cancelAllOperations”的函数,但根据文档,正在运行的操作不会被杀死,而只会发送一个取消消息...... 如何使用此取消消息 o_O 到目前为止,我在某些时候检查我的线程是否被取消,如果是,我不执行其他东西,但如果我执行以下操作:
NSError *saveError = nil;
if(!self.isCanceled)
[insertionContext save:&saveError];
仍有可能在 if-check 和保存之间取消线程。
所以我的问题: 我该如何正确处理?是正确取消线程的问题吗?
【问题讨论】:
标签: objective-c multithreading core-data