目标C - 核心数据的一对多关系数据回溯

rea*_*ify 5 core-data objective-c ios

在此输入图像描述

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

作者可以出版许多书籍,书籍可以有很多章节.在示例中,我想要检索所有具有readDate为null的书中章节的Autors.

- (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];

..
..
Run Code Online (Sandbox Code Playgroud)

这不起作用,我正在努力寻找如何做到这一点.目前我宣布了一个作者mutablearray. - 让所有作者 - 循环遍历所有书籍 - 循环遍历所有章节 - 如果readDate为null,则将其添加到作者数组

这有效,但我想在没有嵌套循环的情况下解决这个问题.

Mar*_*n R 7

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

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

(我认为"书籍"和"章节"实际上是很多关系,即使你的图表显示它们是一对一的关系.)


geo*_*geo 3

这看起来像这样的情况:SUBQUERY

NSFetchRequest* fetch = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Author class])];

[NSPredicate predicateWithFormat:@"(SUBQUERY(books, $cd, SUBQUERY($cd.chapters, $m, $m.readDate == NULL).@count != 0).@count != 0"];
[fetch setPredicate:uidCondition];
Run Code Online (Sandbox Code Playgroud)

不确定在数据库中检查的是 == nil 还是 NULL。我只是检查值,所以目前无法判断