首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时获取obtainPermanentIDsForObjects:错误:是否需要?来自两个不同的班级?

何时获取obtainPermanentIDsForObjects:错误:是否需要?来自两个不同的班级?
EN

Stack Overflow用户
提问于 2014-08-07 00:46:58
回答 1查看 1.6K关注 0票数 3

我对使用此方法的背景(两个不同版本的返回值不同)的理解是: MOC在内存中创建的托管对象首先被分配临时对象ID,这样就可以在不涉及持久存储的情况下唯一标识它们。但是,保存MOC时,持久性存储协调器需要这些托管对象的永久对象ID。(如果我弄错了,请纠正我!)

我从没用过MOC

代码语言:javascript
复制
- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error

,但仍然调用MOC的保存:方法没有问题。然而,我本周由第三方使用的代码,每次插入新的托管对象之后都使用这个MOC的obtainPermanentIDsForObjects,这真的有必要吗??可能是多线程环境所需要的?但是为什么苹果"CoreData PG“从来没有提到过这种方法呢?在保存MOC之前,持久性存储协调器是否会自动为我完成此操作?

在研究期间,我在NSIncrementalStore类中看到了该方法的另一个版本。

代码语言:javascript
复制
- (NSArray *)obtainPermanentIDsForObjects:(NSArray *)array error:(NSError **)error

它说:“在executeRequest:withContext:error: with请求之前调用此方法(在子类中重写,然后调用),以便为新插入的对象分配永久ID。”

我该怎么办?我是否需要使用这两个版本(NSIncrementalStore子类的在保存之前,以及MOC的版本在新的创建之后)?哪种方法必须调用或不调用?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-07 01:15:17

NSManagedObject第一次插入到NSManagedObjectContext中时,它有一个临时NSManagedObjectID。当保存上下文时,NSManagedObjectContext将执行与NSManagedObjectContext上的obtainPermanentIDsForObjects:error等价的操作,后者反过来调用NSPersistentStoreCoordinator,后者查找负责此对象的存储,并在存储本身上调用obtainPermanentIDsForObjects:error。这将NSManagedObject的临时ID转换为永久ID。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25172559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档