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

Ján*_*nos 4 core-data ios

我正在考虑使用两个persistent store coordinator,PSC1只能读取一个SQLite DB,PSC2读,写 DB.有时PSC1会从中重新加载内容DB.

你认为有可能吗?

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

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

que*_*ish 5

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

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

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

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

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

NSPersistentStore在访问文件系统以获取记录时,内置的具体类将我们文件协调(但并不总是用于元数据).所以是的,涉及到一个锁,它应该防止两个NSPersistentStore实例同时修改相同的文件.

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