目标 c - 获取数据(核心数据)
Posted
技术标签:
【中文标题】目标 c - 获取数据(核心数据)【英文标题】:objective c - fetch data (core data) 【发布时间】:2015-03-13 07:18:04 【问题描述】:我有两张桌子Photo
和Photographer
。
下面是表格的结构。
我正在尝试获取所有拍摄名为“熊猫”的照片的Photographers
的姓名。
这是我的代码,但由于某种原因它返回为空。
NSArray *matchingPhotographers;
NSFetchRequest *fetch = [[NSFetchRequest alloc]init];
NSEntityDescription *desc = [NSEntityDescription entityForName:@"Photographer" inManagedObjectContext:context];
[fetch setEntity:desc];
[fetch setPredicate:[NSPredicate predicateWithFormat:@"photo.name like[c] %@",@"Panda"]];
NSError *error;
matchingPhotographers = [context executeFetchRequest:fetch error:&error];
NSLog(@"Photographers: %@", matchingPhotographers);
我做错了吗?查询肯定会返回至少 1 位摄影师。
谢谢
【问题讨论】:
乍一看没有任何问题。你确定是熊猫/熊猫? 【参考方案1】:照片是一个集合,所以你的谓词必须是:
[fetch setPredicate:[NSPredicate predicateWithFormat:@"ANY photo.name like[c] %@",@"Panda"]];
此谓词查找“摄影师”,其中列出了一张名称类似于“熊猫”的照片(在他的照片收藏中)。
【讨论】:
【参考方案2】:photo
是一对多关系,因此使用子查询谓词来计算关系中符合条件的照片会更容易:
@"SUBQUERY(photo, $p, $p.name ==[c] %@).@count > 0", @"Photo"
请注意,我也没有使用 LIKE,因此它不是正则表达式比较。
【讨论】:
除此之外,photo
最好命名为 photos
,所以你记得它是一对多以上是关于目标 c - 获取数据(核心数据)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 WatchKit 扩展目标中获取核心数据持久存储路径