【问题标题】:CoreData Multithreading Proper Store DeletionCoreData 多线程正确存储删除
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 问题在于,尚未开始的操作仍然可以开始,尽管它们完全没有必要,因为不需要数据。此外,我必须等待他们从互联网上下载东西......这可能需要很长时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多