CoreData。在多线程,多上下文中管理多个协调器

时间:2015-08-20 11:06:06

标签: ios multithreading core-data

我有一个可能有很多用户的应用程序。每个用户都有自己的数据库(==一个sqlite文件)。每个数据库都有相同的模型。

当用户打开应用程序时,他选择了它的头像,然后加载模型,ManagedContext,StoreCoordinator。效果很好。 然后,用户需要查看数据,并在后台线程中下载,解析和集成数据到其数据库中。上下文很好地同步然后合并。

一切正常(谢谢你)。

现在,如果user1在数据之后没有等待,则断开连接,并且user2快速连接... user1的下载正在完成,解析,并且其数据已集成到其上下文中。应用程序崩溃了这条消息 “无法从此NSManagedObjectContext的协调器访问对象的持久存储”。

我理解为什么:我已将商店协调员与持久商店断开连接。上下文试图达到一些不是最新的东西。

我有几个问题:

  • 如何正确关闭user1持久存储?

  • 如何保存所有需要(或在几秒钟内需要)的上下文?

  • 以及如何关闭所有相关的上下文,它们仍然在做什么,并阻止它们访问死库(并崩溃)?

请注意,我的持久存储初始化是标准的

self.persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    if let coordinator = persistentStoreCoordinator
    {
          var error: NSError?
          self.store  = coordinator.addPersistentStoreWithType(storeType, configuration: configuration, URL: storeURL, options: options, error: &error)
          if store == nil
          {
               return error
          }
          else
          {
               self.mainContext.persistentStoreCoordinator = coordinator
               startReceivingContextNotifications()
               return nil
           }
    } else {
          return NSError(...)
    }

我想我需要一个Coordinator.removePersitentStore(...)。但是没有想法如何告诉每个上下文(每个都在其线程中)停止活动,保存他们在商店中的更改(在它卸载之前或其他)。

任何帮助表示感谢。

0 个答案:

没有答案
相关问题