5

在此处输入图像描述

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

一个作者可以出版很多本书,而一本书可以有很多章节。在示例中,我想检索所有在书中有一章 readDate 为空的 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];

..
..

这不起作用,我正在努力寻找如何做到这一点。目前我声明了一个作者可变数组。- 获取所有作者 - 遍历他们的所有书籍 - 遍历所有章节 - 如果 readDate 为空,则将其添加到作者数组

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

4

4 回答 4

7

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

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

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

于 2013-07-09T12:56:13.420 回答
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];

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

于 2013-07-09T12:49:32.000 回答
0

根据您之后需要对数据执行的操作,不要忘记您还可以获取 readDate 为 nil 的章节,然后返回书籍和作者。

于 2013-07-09T13:16:13.777 回答
0

您还可以签出 Sensible TableView 框架,该框架将处理所有核心数据获取并自动在表格视图中显示数据。为我节省了大量时间。

于 2013-07-09T21:17:47.560 回答