目标 c - 获取数据(核心数据)

Posted

技术标签:

【中文标题】目标 c - 获取数据(核心数据)【英文标题】:objective c - fetch data (core data) 【发布时间】:2015-03-13 07:18:04 【问题描述】:

我有两张桌子PhotoPhotographer。 下面是表格的结构。

我正在尝试获取所有拍摄名为“熊猫”的照片的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 扩展目标中获取核心数据持久存储路径

从服务获取数据目标 c

Objective C,核心数据获取请求

使用 Objective C 创建并从 Swift 获取的核心数据

在 Objective C 中从 XML 中获取核心数据

获取所有核心数据子实体