iOS谓词子查询不起作用

时间:2015-01-17 00:33:12

标签: ios objective-c core-data nspredicate

我正在敲打这个...我的应用程序有以下coredata实体:

菜单项 ContentItem

MenuItems可以有许多ContentItems,每个ContentItem都可以属于许多MenuItems,所以我在两者之间有很多关系。

关系是: MenuItem - >> ContentItem:menuContentItems

ContentItem - >> MenuItem:contentItemMenuItem

我正在尝试为谓词使用MenuItem的title属性,因此我在谓词中使用了我选择的MenuItem标题。

当用户选择MenuItem时,我想显示与该MenuItem相关的ContentItem。

为了显示正确的ContentItem列表,我尝试了这样的标准谓词:

[fetchedRequest setPredicate:[NSPredicate predicateWithFormat:@"ANY contentItemMenuItem.title = %@", selectedMenuItem.title]];

没有运气。我收到这个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath contentMenuItem.title not found in entity <NSSQLEntity ContentItem id=2>'

我也试过这样的子查询:

[fetchedRequest setPredicate:[NSPredicate predicateWithFormat:@"SUBQUERY(MenuItem, m$, m.title =  %@)",selectedMenuItem.menuItemTitle]];

也没有运气。错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "SUBQUERY(MenuItem, m$, m.title =  %@)"'

必须有一种方法可以实现这一点。

1 个答案:

答案 0 :(得分:4)

您应该可以使用

[selectedMenuItem valueForKey:@"menuContentItems"];

出于好奇,如果你需要让SUBQUERY工作,它会看起来像这样

  This evaluates to a collection e.g. `contentItem.menuItems`
             |
             |              This is the predicate
             |                       |
             v                       V
SUBQUERY(menuItems, $menuItem, $menuItem.title == 'test').@count > 0
                       ^
                       |
       This is what each item will be referred as in the predicate

子查询将返回一组结果,因此我们只询问是否返回了超过0个项目,如果是,那么我们就匹配了。