【问题标题】:The correct NSPredicate format for one-to-many relationship in Core DataCore Data 中一对多关系的正确 NSPredicate 格式
【发布时间】:2009-07-25 12:06:27
【问题描述】:

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

对于这个特定的任务,我想检索与 B 有关系且属性与“字符串”匹配的所有 A 对象。

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

[NSSQLGenerator generateSQLStatementForFetchRequest:ignoreInheritance:countOnly:]

似乎是什么问题?

谁能告诉我正确的谓词格式?

【问题讨论】:

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


    【解决方案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上发布了这个,但是仍然没有人回答它。

      【讨论】:

        猜你喜欢
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 2011-10-15
        • 1970-01-01
        • 2021-12-29
        相关资源
        最近更新 更多