当获取PermanentIDsForObjects:错误:是否需要?来自2个不同的班级?

时间:2014-08-07 00:46:59

标签: ios core-data nsmanagedobjectcontext

我对使用它的背景(2个不同的版本,它们在返回值上有所不同)的理解是:管理 - 由MOC在内存中创建的对象首先被分配临时对象ID,以便可以唯一地识别它们而不涉及持久性商店。但是,在保存MOC时,持久性存储协调器需要这些Managed-objects的永久对象ID。 (请纠正我,如果我错了,请!)

我从未使用过MOC的

- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error

,但仍然可以毫无问题地调用MOC的save:方法。但是我本周第三方使用的代码,每次插入一个新的Managed-object后都使用这个MOC的getsPermanentIDsForObjects,这真的是必要的吗?可能需要多线程环境?但为什么Apple" CoreData PG"从未提过这种方法?持久存储协调器是否在保存MOC之前自动为我完成了?

在研究期间,我在NSIncrementalStore Class中看到了这个方法的另一个版本......

- (NSArray *)obtainPermanentIDsForObjects:(NSArray *)array error:(NSError **)error

,它说"在executeRequest之前调用此方法(在子类中重写,然后调用,我猜):withContext:error:带有保存请求,为新插入的对象分配永久ID。"

我该怎么办?我是否需要同时使用这两个版本(保存前的NSIncrementalStore子类和新创建后的MOC' s)?哪种方法必须叫做OR?

谢谢!

1 个答案:

答案 0 :(得分:3)

NSManagedObject首次插入NSManagedObjectContext时,它会有一个临时NSManagedObjectID。保存上下文后,NSManagedObjectContext将在obtainPermanentIDsForObjects:error上执行相当于NSManagedObjectContext的操作,NSPersistentStoreCoordinator会调用obtainPermanentIDsForObjects:error,后者会查找负责此对象的商店并调用{ {1}}在商店本身。这会将NSManagedObject的临时ID转换为永久ID。

NSManagedObjectID可以在NSManagedObjectContext之间传递(如果它们共享相同的商店),但前提是NSManagedObjectID是永久ID。您可以调用obtainPermanentIDsForObjects:error将临时ID转换为独立于保存操作的永久ID,但该对象所属的商店可能并不期望这样。