Jas*_*son 117 macos cocoa core-data nsfetchrequest ios
我可以使用以下代码轻松地在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];
但是,我想以不启动自己的获取请求的方式执行此操作.有任何想法吗?
rge*_*rge 204
你要:
-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
                                   error:(NSError **)error
从具有该ID的商店中获取对象,如果不存在,则为nil.
(请注意:NSManagedObjectContext上有两种方法,它们具有相似的名称,使我绊倒.为了帮助它们保持正确,这是其他两种方法的作用:
-(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID
...将使用提供的objectID创建一个故障对象,无论这个对象是否实际存在于商店中.如果它不存在,除非您首先使用NSManagedObjectContext插入对象,否则触发该错误的任何内容都将失败insertObject:.我发现的唯一用途是在保留ObjectID的同时将对象从一个商店复制到另一个商店.
-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID
...将返回具有该ID的对象(如果已通过此managedObjectContext从存储中获取).如果有人知道这种方法有用,请评论.)
[eta.:第一种方法和另外两种方法之间的另一个重要区别是existingObjectWithID:error:永远不会返回故障; 它总是为你取出整个物体.如果你试图避免这种情况(例如使用具有大blob属性的昂贵的获取对象),你必须聪明地使用objectWithID:或者objectRegisteredForID:不会触发故障; 或使用正确配置的获取请求.]
| 归档时间: | 
 | 
| 查看次数: | 67799 次 | 
| 最近记录: |