如何从特定对象ID核心数据对象?如何从特定对象ID核心数据对象?(How to get Core D

2019-05-12 19:20发布

我可以用下面的代码中核心数据很容易地得到一个对象的ID:

NSManagedObjectID *moID = [managedObject objectID];

但是,有没有办法给它一个特定的对象ID获取对象了核心数据存储的? 我知道我可以通过使用NSFetchRequest,这样做:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID];
[fetchRequest setPredicate:predicate];

不过,我想这样做的,不主动进行读取请求的方式。 有任何想法吗?

Answer 1:

你要:

-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
                                   error:(NSError **)error

获取从具有该ID,或零,如果它不存在,商店中的对象。

(注意:有上的NSManagedObjectContext两种方法与我绊倒了似乎相似,名称以帮助他们保持笔直,这里就是另外两个做:

-(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID

...将创建与所提供的objectID故障对象,这种对象是否真正在商店存在。 如果它不存在,任何火灾,故障会,除非你的NSManagedObjectContext首款插入对象失败insertObject: 唯一的使用,我发现这是从店面复制对象,同时保留的ObjectID存储。

-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID

...将返回有一个ID, 如果它已经从商店这个managedObjectContext获取的对象。 如果有人知道这种方法是有用的,请评论。)

的η:第一种方法,另外两个之间的另一个重要区别是, existingObjectWithID:error:从未返回一个故障; 它总是获取整个对象为您服务。 如果你想避免这种情况(例如,有工作昂贵到取一个大斑点属性对象),你必须要巧妙搭配objectWithID:objectRegisteredForID:这不火的故障; 或使用适当配置的提取请求。]



Answer 2:

objectWithID:就是你正在寻找的方法,它是做到这一点的推荐方式。 objectWithID:将有效地使用的NSManagedObjectContext拉对象只为多层次的需要-不像有些这样做的其他方式。 objectWithID:将正确使用内存中的父上下文信息,持久存储协调,以及本身才去后备存储持久性存储。

这是覆盖在深度在WWDC 2012届“核心数据的最佳实践”。



文章来源: How to get Core Data object from specific Object ID?