0

我正在使用 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'

我错过了什么?

在此先感谢您的时间。

4

1 回答 1

4

您会遇到该异常,因为不支持多级键路径查询,如 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 开始,支持多级 keypath 查询,如不区分大小写、CONTAINS、BEGINSWITH、ENDSWITH,因此海报的原始尝试现在有效:

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

Realm v0.88.0 即将发布。

于 2014-10-15T17:35:38.597 回答