Core Data 中一对多关系的正确 NSPredicate 格式
Posted
技术标签:
【中文标题】Core Data 中一对多关系的正确 NSPredicate 格式【英文标题】:The correct NSPredicate format for one-to-many relationship in Core Data 【发布时间】:2009-07-25 12:06:27 【问题描述】:我有一个具有一对多关系的托管对象模型 A 和 B。
对于这个特定的任务,我想检索与 B 有关系且属性与“字符串”匹配的所有 A 对象。
我曾尝试过@"ALL bObjects.bProperty MATCHES 'string'"
,但它导致了 objc_exception_throw in:
[NSSQLGenerator generateSQLStatementForFetchRequest:ignoreInheritance:countOnly:]
似乎是什么问题?
谁能告诉我正确的谓词格式?
【问题讨论】:
【参考方案1】:根据Predicate Programming Guide,在从Core Data SQL 存储中获取数据时,您不能使用MATCHES
运算符。
matches
运算符使用regex
,因此不受 Core Data 的 SQL 存储支持 - 尽管它确实适用于内存过滤。
至于您的谓词的其余部分,它目前只会返回A
对象,其中整个bObjects
集合具有与您的输入字符串匹配的bProperty
。
如果您想要返回任何 A
对象,这些对象在 bObjects
集中有任何匹配的对象,您可能需要使用 ANY
运算符修饰符。
ANY bObjects.bProperty LIKE[cd] 'string'
【讨论】:
【参考方案2】:感谢您指出这些限制,是的,尽管我想相信文档,但我尝试了 MATCHES for SQLite fetch request,它确实有效,但为了安全起见我将其更改为 LIKE。
唯一不起作用的是,如果我在 Core Data 上使用此谓词,使用 SQLite 存储并在相关对象(在这种情况下为多对象)上请求获取请求,而不是使用匹配项。
目前,我没有使用基于关系的获取查询,风险太大,我仍然不知道是什么错误,我已经在devforums.apple.com上发布了这个,但是仍然没有人回答它。
【讨论】:
以上是关于Core Data 中一对多关系的正确 NSPredicate 格式的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 获取请求与 NSFetchedResultsController 的一对多关系