iOS 谓词子查询不工作

iOS Predicate Subquery not working

我正在努力解决这个问题...我的应用程序具有以下核心数据实体:

菜单项 内容项

MenuItem 可以有多个 ContentItem,每个 ContentItem 可以属于多个 MenuItem,所以我在两者之间建立了多对多关系。

关系是: 菜单项 -->> 内容项:menuContentItems

内容项 -->> 菜单项:内容项菜单项

我正在尝试将菜单项的标题属性用于谓词,因此谓词中使用了我选择的菜单项的标题。

当用户选择一个 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

子查询将 return 一个结果集合,因此我们只需要询问是否有超过 0 个项目 returned,如果是,那么我们有一个匹配项。