iOS谓词子查询不起作用

标签 ios objective-c core-data nspredicate

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

菜单项 内容项

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/

相关文章:

ios - 未收到NSNotification

xcode - 如何在 Swift 中生成 NSManagedObject 类而不是 Xcode 8 中的 Objective C?

ios - UITableviewCell - 在编辑模式下单击空复选标记圆圈不会选择单元格

objective-c - 如何以编程方式更改标签的字体?

ios - UIPageViewController 和 UICollectionView 用于单元格网格结构

ios - 发现意外的 Mach-O header 代码 : 0x72613c21 while generating ipa file

cocoa - Core Data内容可以直接编辑吗?

ios - 为什么要在分层 ViewController 结构中使用 NSFetchedResultsController?

ios - 如何在uipickerview上添加完成按钮

cocoa-touch - 我可以以编程方式修改选择的 UITableViewCell 吗?