【问题标题】:Query nested object array for property with Realm使用 Realm 查询嵌套对象数组的属性
【发布时间】:2018-05-10 23:27:58
【问题描述】:

一段时间以来,我一直在尝试编写一个查询来访问一个等于特定键的对象,但没有成功。我已经浏览了 SO 和 Realm 文档,但没有任何运气。

如果我打印出 CachedCodes RLMObject 的结构,它看起来像这样:

CachedCodes {
    Codes = Codes {
            assets = RLMArray<KVString> (
                [0] KVString {
                    key = Some Key;// this is what I'd want to query for
                    value = Some Value;
                }
            );
        };
}

这是我的班级结构:

@interface CachedCodes : RLMObject
@property (nonatomic, strong, readonly) Codes *Codes;//readwrite in .m
@end

@interface Codes : RLMObject
@property (nonatomic, strong, readonly) RLMArray<KVString *><KVString> *assets;//readwrite in .m
@end

@interface KVString : RLMObject
@property (nonatomic, strong, readonly) NSString *key;//readwrite in .m
@property (nonatomic, strong, readonly) NSString *value;//readwrite in .m
@end

RLM_ARRAY_TYPE(KVString);

这是我尝试过的:

[CachedObjects objectsWhere:@"Codes.assets.key == 'Some key'"];

错误:包含数组属性的键路径必须使用聚合操作。

[CachedObjects objectsWhere:@"Codes.assets.key IN 'Some key'"];

错误:包含数组属性的键路径必须使用聚合操作。

[CachedObjects objectsWhere:@"ANY Codes.assets.key == 'Some key'"];

错误:没有错误。它不会崩溃,也不会给我带有键“Some key”的对象。相反,它给了我所有的对象。

如果有人有任何意见,我将永远感激:)

【问题讨论】:

  • 明确地说,您希望查询返回一个KVString 对象,其key 的值与您想要的字符串匹配?
  • 是的,没错。

标签: objective-c realm


【解决方案1】:

经过反复讨论,这里提出了修改后的解决方案。总而言之,Realm 提供了一种在领域内直接获取特定类型的内部嵌套对象的方法,而无需过多担心到达那里的确切键路径。

RLMResults<KVString *> *results = [KVString objectsWhere:@"key == 'SomeKey'"];

【讨论】:

  • 返回相同的东西:/。 Key paths that include an array property must use aggregate operations
  • 啊,哎呀,“聚合操作”的意思是“ANY”或“ALL”。更新了代码(抱歉,目前无法亲自测试)
  • 它说不支持“ALL”。但是,“ANY”不会崩溃,而是会返回未过滤的整个列表。
  • 如果上面的代码不起作用,在我有机会做一些有效的、经过测试的代码之前,我将不再发布任何内容。 可能必须使用谓词SUBQUERY 命令来挖掘嵌套数组。
  • 我用下面的语法 RLMResults&lt;KVString *&gt; *results = [KVString objectsWhere:@"key == 'SomeKey'"]; 取得了成功.当我这样做时,我正确地得到了一个且只有一个值符合预期的对象。
猜你喜欢
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多