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,则将其添加到作者数组
这有效,但我想在没有嵌套循环的情况下解决这个问题.
对于嵌套的多对象关系,SUBQUERY是必要的(正如@geo已经正确地说过).但是一个SUBQUERY应该足够了:
[NSPredicate predicateWithFormat:@"SUBQUERY(books, $b, ANY $b.chapters.readData == NULL).@count > 0"]
Run Code Online (Sandbox Code Playgroud)
(我认为"书籍"和"章节"实际上是很多关系,即使你的图表显示它们是一对一的关系.)
这看起来像这样的情况: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。我只是检查值,所以目前无法判断