如何从特定的对象ID获取核心数据对象?
我可以使用以下代码轻松获取Core Data中的对象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];
但是,我想这样做不会启动自己的获取请求。 有任何想法吗?
你要:
-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error
从具有该ID的商店获取对象,如果不存在,则为零。
(注意:在NSManagedObjectContext上有两个方法,类似的名字使我不知所措,为了保持直线,下面是其他两个方法:
-(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID
…将使用提供的objectID创build一个故障对象, 不pipe这个对象是否真的存在于商店中。 如果它不存在,任何引发错误的东西都将失败,除非先用NSManagedObjectContext的insertObject:
插入对象。 我发现的唯一用途是将对象从存储区复制到存储区,同时保留ObjectID。
-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID
…将返回具有该ID的对象, 如果已通过此managedObjectContext从存储中获取该对象。 如果有人知道这个方法是有用的,请发表评论。)
[eta .:第一个方法和另外两个之间的另一个重要区别是existingObjectWithID:error:
永远不会返回一个错误; 它总是为你提取整个对象。 如果你试图避免这种情况(比如使用一个blob属性的昂贵的对象),你必须聪明的使用objectWithID:
或者objectRegisteredForID:
objectWithID:
它不会触发错误; 或使用正确configuration的获取请求。]
objectWithID:
是您正在查找的方法,并且这是推荐的方法。 objectWithID:
将有效地使用NSManagedObjectContext来拉动对象,只要根据需要多层次 – 不像其他一些手段这样做。 在转到后备存储之前, objectWithID:
将正确使用父上下文中的内存信息,持久存储协调器和持久存储本身。
这在WWDC 2012会议“核心数据最佳实践”中有深入的介绍。