两个NSPersistentStoreCoordinator可以使用相同的DB吗?

时间:2015-05-01 12:28:52

标签: ios core-data

我正在考虑使用两个persistent store coordinatorPSC1 仅读一个sqlite DBPSC2读写 DB。有时PSC1会从DB 重新加载内容

你认为有可能吗?

你认为两个PSC能否以原子方式读/写DB,而不是导致任何损坏?

PSC是否对DB进行了任何锁定,以便从其他PSC进行访问?

1 个答案:

答案 0 :(得分:5)

您可以让两个不同的NSPersistentStoreCoordinator实例访问相同的文件。事实上,几年前这是一种推荐的方法。

然而,这样做存在问题。如果一个NSPersistentStoreCoordinator进行了写入文件系统的更改,则另一个NSPersistentStoreCoordinator实例将不会知道它。 NSPersistentStoreCoordinatorNSManagedObjectContext维护他们管理的对象的内存状态。使用两个NSPersistentStoreCoordinator实例会导致它们在某些时候不同步。例如,如果NSPersistentStoreCoordinator A从NSPersistentStore中的记录加载对象,则会有该对象的内存中版本。如果NSPersistentStoreCoordinator B然后删除由相同记录支持的对象,则A的对象版本没有记录。当Core Data试图在A中对该对象进行故障处理时,您将获得异常。

  

你认为两个PSC能否以原子方式读/写DB,而不是导致任何损坏?

腐败很少是NSSQLiteStoreType存储的问题。与其他商店一样,这当然是可能的。

  

PSC是否对DB进行了任何锁定,以便从其他PSC进行访问?

内置的NSPersistentStore具体类在访问文件系统时记录文件(但并不总是用于元数据)。所以是的,涉及锁定,它应该阻止两个NSPersistentStore实例同时修改相同的文件。

如上所述,这不是你应该关注的问题。当使用多个协调员时,协调员的内存状态及其上下文是一个更紧迫的问题。