ios - Objective-C - 从核心数据中检索一对多关系数据

标签 ios objective-c core-data

enter image description here

我有一个核心数据模型(做了一个简化以便更容易解释我想做什么)。

一个作者可以出版多本书,一本书可以有很多章节。 在示例中,我想检索在一本书中有一章的所有作者,其中 readDate 为 null。

- (NSArray *)incompleteChaptersInManagedObjectContext:(NSManagedObjectContext *)context
{
    NSFetchRequest* fetch = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Author class])];
    NSPredicate* uidCondition = [NSPredicate predicateWithFormat:@"books.chapters.readDate!=nil"];
    [fetch setPredicate:uidCondition];

    NSArray* resultArray = [context executeFetchRequest:fetch error:&error];

..
..

这行不通,我正在努力寻找如何做到这一点。 此刻的我 声明一个作者可变数组。 - 获取所有作者 - 循环浏览他们所有的书 - 遍历所有章节 - 如果 readDate 为空,将其添加到作者数组

这行得通,但我想在没有嵌套循环的情况下解决这个问题。

最佳答案

对于嵌套的一对多关系,一个 SUBQUERY 是必要的(正如@geo 已经正确说过的)。 但是一个 SUBQUERY 就足够了:

[NSPredicate predicateWithFormat:@"SUBQUERY(books, $b, ANY $b.chapters.readData == NULL).@count > 0"]

(我假设“书籍”和“章节”实际上是对多关系,即使你的 图表将它们显示为一对一关系。)

关于ios - Objective-C - 从核心数据中检索一对多关系数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548447/

相关文章:

ios - iOS NSTimer触发两次

ios - 实现类似于 UICollectionView 的 "registerClass"

ios - 从 iOS 6 的导航栏中移除白色渐变

ios - 在 TableView 中重新排序按日期排序的单元格项目

cocoa - NSManagedObjectContext 保存导致 NSTextField 失去焦点

ios - SQLite 是否创建了一个我可以排序/获取的数字索引?

ios - 如何创建自定义类以向 UINavigationBar IOS 添加阴影

iphone - 如何从包含字典的 NSArray 中获取最大值?

iphone - iPhone虚拟键盘添加新按钮?

iphone - 滑动删除具有奇怪行为的单元格