【问题标题】:NSPredicate that references multiple fields on a to-many relationship?NSPredicate 引用一对多关系上的多个字段?
【发布时间】:2011-04-09 12:37:14
【问题描述】:

我正在使用 SQLite 持久存储。我有一个NSManagedObjectDen 具有一对多关系BearBear 有几个字段:

Bear:
    breed
    color
    age
    ...

当我为我的Den 对象构建获取请求时,我可以过滤到具有相关Bear 和特定字段值的对象:

NSPredicate *hasGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.breed == 'grizzly'"];

或者我可以很容易地搜索一个有棕熊的Den

NSPredicate *hasBrownBearPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown'"];

但是有什么方法可以搜索Den,它的熊既是棕色的又是灰熊的?以下是合法的,但我认为是不正确的:

// Not quite right: search for a den with a brown bear AND a grizzly
NSPredicate *hasBrownAndGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown' AND ANY Bear.breed == 'grizzly'"];

【问题讨论】:

    标签: iphone objective-c core-data nspredicate


    【解决方案1】:

    您可以使用SUBQUERY 谓词表达式来做到这一点。如果查询带有熊的巢穴(其中Den 与名为bearsBear 有一对多关系),它既是棕色又是灰熊:

    [NSPredicate predicateWithFormat:@"SUBQUERY(bears, $b, $b.color=='brown' AND $b.breed=='grizzly').@count > 0"];

    【讨论】:

    • Core Data 文档让我……有时感到沮丧。这是完美的。
    • 我已经向很多人指出了 NSExpression 文档。请在 bugreporter.apple.com 上提交一份关于文档的错误报告,并建议它可能是如何呈现的,以便您可以更快地找到它。
    • 可以保存那个 .@count 值吗?
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多