我正在敲打这个...我的应用程序有以下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 = %@)"'
必须有一种方法可以实现这一点。
答案 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个项目,如果是,那么我们就匹配了。