【问题标题】:Using the keywords: CONTAINS, BEGINSWITH, ENDSWITH on multi-level keypaths in Realm.io在 Realm.io 的多级键路径上使用关键字:CONTAINS、BEGINSWITH、ENDSWITH
【发布时间】:2014-10-15 17:03:04
【问题描述】:

我正在使用 0.86.3 版本的 realm.io 框架。

这是我的对象的样子:

RLMArray <0x7fd1f3642a50> (
[0] Product {
    identifier = 4;
    overview = test;
    desc = test;
    reference = AB-123;
    category = Category {
        identifier = 2;
        name = Telescopic Arm;
        level = 1-1;
        parent = Category {
            identifier = 1;
            name = Arm;
            level = 1;
            parent = (null);
        };
    };
}
)

到目前为止一切看起来都很好,但是当我尝试请求时:

RLMArray *products = [GEProduct objectsWhere:@"category.name contains 'telescopic'"];

我得到一个:

uncaught exception 'Invalid type', reason: 'Predicate 'CONTAINS' is not supported'

我错过了什么?

提前感谢您的宝贵时间。

【问题讨论】:

    标签: ios objective-c realm


    【解决方案1】:

    您遇到该异常是因为不支持多级键路径查询(如 CONTAINS、BEGINSWITH、ENDSWITH)以及对多级键路径不区分大小写的查询。我们正在开发此功能,但暂时没有。

    这些关键字支持直接属性查询,因此您可以重新设计查询,使其看起来像这样:

    RLMArray *categories = [GECategory objectsWhere:@"name contains 'telescopic'"];
    RLMArray *products = [GEProduct objectsWhere:@"category IN %@", categories];
    

    我知道这并不优雅,但在我们支持更复杂的多级 keypath 查询之前,它应该可以工作。

    更新(2014 年 10 月 27 日)

    从 Realm v0.88.0 开始,支持不区分大小写、CONTAINS、BEGINSWITH、ENDSWITH 等多级 keypath 查询,因此发布者最初的尝试现在可以正常工作:

    [GEProduct objectsWhere:@"category.name contains 'telescopic'"];
    

    Realm v0.88.0 即将发布。

    【讨论】:

    • 既然 RLMArray 实现了 NSFastEnumeration 协议,为什么我们不能只使用类别对象 (RLMArray) 来进行产品请求?
    • 是的!我刚刚编辑了我的答案以反映这一点。来自 Realm 的 Thomas 最近添加了对此的支持。
    • 哦好的,谢谢您的确认。它简化了这个过程。
    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多