我正在努力解决这个问题...我的应用程序具有以下核心数据实体:
菜单项 内容项
MenuItem 可以有多个 ContentItem,每个 ContentItem 可以属于多个 MenuItem,所以我在两者之间建立了多对多的关系。
关系是: 菜单项 -->> 内容项:菜单内容项
ContentItem -->> MenuItem: contentItemMenuItem
我正在尝试将 MenuItem 的标题属性用于谓词,因此我选择的 MenuItem 的标题用于谓词。
当用户选择一个 MenuItem 时,我想显示与该 MenuItem 相关的 ContentItem。
为了显示正确的 ContentItems 列表,我尝试了这样的标准谓词:
[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 = %@)"'
必须有一种方法让它起作用。
最佳答案
你应该可以使用
[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 个以上的项目,如果是,那么我们就有了匹配项。
关于iOS谓词子查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27994890/