14 iphone cocoa core-data objective-c
我想获取与对象A具有多对多关系的对象B(即A - >> B).我已经记忆中有A. 我知道我可以从A中获取B对象的NSSet,但最好是对B对象进行获取请求(特别是如果我想在UITableView中按日期排序)?
我如何才能提出只获得属于单个对象A的B对象的请求?
如果您已经拥有A的实例,只需通过A的访问者访问相关的B实例.
如果你需要直接获取与特定A相关的所有B(在这种情况下你不是),你将为B实体构建一个获取请求,其中一个谓词基于Bs与A的(反向)关系.(具体语法将取决于反向关系名称,以及该反转是一对一还是多对.)
您必须在B类中指定反向关系才能完成您的要求.
但是,我不确定你为什么要反对(没有双关语)来抓取已经在对象A中的B对象集.即使对象本身是延迟加载的,因为你已经在内存中有A,我有预感(虽然专家需要验证)从A中获取集合比指定新的NSPredicate更有效,并创建一个全新的Fetch.
当然,通过"更高效"我们谈论毫秒,即使在像iPhone一样慢的设备上也是如此.我从对象A抓取集合,因为语法更清晰.它也可能更快的事实是奖金.
你需要在你的A的objectID中使用谓词,如下所示:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *BEntity = [NSEntityDescription entityForName:@"B" inManagedObjectContext:moc];
[fetchRequest setEntity:BEntity];
NSPredicate *predicate = [NSPredicate
predicateWithFormat:@"(relationship_to_a = %@)", [yourAInstance objectID]];
[fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
其中relationship_to_a是B管理对象中与A的关系的名称.
希望这可以帮助.
顺便说一句:对于那些建议使用关系集中的错误的其他答案:我自己尝试了这个,并且它比获取它们慢得多,因为Core Data显然会一个接一个地(不是批处理)触发故障,因此,对于较大的套装来说,它会变得非常慢
实际上,如果你通过提取得到你的A实例,那么你可以尝试将NSFetchRequest中的relationshipKeyPathsForPrefetching 设置 为YES,然后关系中的所有对象都不应该是错误.但这对我不起作用,所以我坚持使用'获取解决方案'.
| 归档时间: |
|
| 查看次数: |
14935 次 |
| 最近记录: |