【问题标题】:Trying to write a predicate to compare against the first object of a to-many relationship尝试编写一个谓词来与一对多关系的第一个对象进行比较
【发布时间】:2014-03-23 13:47:54
【问题描述】:

我使用此谓词 [NSPredicate predicateWithFormat:@"ANY lists.name LIKE[cd] %@", listName] 将搜索字符串 (listName) 与名为 lists 的有序 to-many 关系进行比较,但是,有一个设计要求,我必须仅比较搜索字符串 (listName) to-many 关系中有序集合的第一个元素,所以我需要使用 CoreData 谓词来完成类似以下伪代码的操作:
[NSPredicate predicateWithFormat:@"lists.firstObject.name LIKE[cd] %@", listName];

提前谢谢你

p.s 我知道可以获取该有序to-many 关系的第一个对象,然后将listName 与该对象进行比较,但我不会使用这种方法,因为这将是应用程序的开销,因为这个谓词是一个大循环的一部分。

【问题讨论】:

标签: ios iphone objective-c core-data nspredicate


【解决方案1】:

在我的手机上打字,请见谅。

我很确定你可以做到:

"lists[0].name like[cd] %@", ...

还有:

"lists[first].name like [cd] %@", ...

但是,我不知道 Core Data 是否可以评估该谓词。你必须尝试一下并找出答案。

【讨论】:

  • 不幸的是,CoreData 无法评估 [0] 和 [first] 因以下错误而崩溃:'Unsupported function expression lists[0].name'
  • 是否有可能向 Apple 提出建议,将此类(和其他)功能包含到下一个 SDK/iOS 版本的下一个 CoreData 引擎中?实际上这是我第二次被 CoreData 阻止,第一次是用 ALL 关键字(虽然有 ALL 关键字问题的解决方法)。
  • @JAHelia 绝对!您可以通过在bugreport.apple.com 提交新的错误报告来请求此功能。完成后,请在此处发布错误编号;我很想在内部跟踪它的进展。
  • @DaveDeLong 16402088 希望在下一个 SDK 版本中看到这样的功能
【解决方案2】:

我以前回答过这个问题。有序关系有很多问题——它们比硬数据建模功能更方便。

您也应该简单地对对象的顺序进行建模,例如具有类型编号的属性order。那么你的谓词是

[NSPredicate predicateWithFormat:
      @"ANY lists.name LIKE[cd] %@ && order = 1", listName];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 2021-05-30
    • 1970-01-01
    • 2018-08-04
    • 2020-03-24
    • 1970-01-01
    • 2019-07-26
    • 2013-11-15
    相关资源
    最近更新 更多