核心数据中一对多关系的正确NSPredicate格式

时间:2009-07-25 12:06:28

标签: iphone cocoa core-data one-to-many nspredicate

我有一个具有一对多关系的托管对象模型A和B.

对于这个特殊的任务,我想要检索所有与B有关系的A对象,其属性与“string”匹配。

我曾尝试过@"ALL bObjects.bProperty MATCHES 'string'",它导致了一个objc_exception_throw:

[NSSQLGenerator generateSQLStatementForFetchRequest:ignoreInheritance:countOnly:]

什么似乎是问题?

有人可以告诉我正确的谓词格式吗?

2 个答案:

答案 0 :(得分:0)

根据Predicate Programming Guide,从Core Data SQL商店中提取时,您无法使用MATCHES运算符。

  

matches运算符使用regex,因此Core Data的SQL存储不支持它 - 尽管它可以用于内存中过滤。

对于谓词的其余部分,它目前只返回A个对象,其中整个bObjects集合的bProperty与您的输入字符串匹配。

如果你想要的是返回A集合中任何具有任何对象的bObjects个对象,那么你想要使用ANY运算符修饰符。

ANY bObjects.bProperty LIKE[cd] 'string'

答案 1 :(得分:0)

感谢您指出这些限制,是的,我想要相信文档,我尝试MATCHES for SQLite获取请求,它确实有效,但为了安全起见,我将其更改为LIKE。

唯一不起作用的是,如果我在使用SQLite存储的Core Data上使用此谓词,并在相关对象上使用获取请求(在这种情况下为to-many),而不使用匹配。

现在,我没有使用基于关系的获取查询,风险太大,我仍然不知道这是什么错误,我在devforums.apple.com上发布了这个,但是没有人仍然回答它。 / p>