根据RLMArray项属性查找对象

时间:2017-04-19 21:10:22

标签: objective-c realm

我试图根据在主对象上的RLMArray中存储为项目的对象的标识符,对Realm对象的集合进行搜索操作。就像这两个模型一样:

// Person model
@interface Person : RLMObject
@property int personID;
@property NSString *name;
@property RLMArray<Dog *><Dog> *dogs;
@end

// Dog model
@interface Dog : RLMObject
@property int dogID;
@property NSString *name;
@property int age; // Some other random properties
@end

所以,正如你所看到的,我们每个人都拥有RLMArray个狗的财产。

查询:给定dogID,如何查询数据库以获取所有者?

1 个答案:

答案 0 :(得分:2)

我正在为这个答案寻找一个“直接”的方法。我没有想过数据库的反向关系。我们只需要在子对象上创建一个RLMLinkingObjects属性:

@interface Dog : RLMObject
@property int dogID;
@property NSString *name;
@property int age; // Some other random properties
@property (readonly) RLMLinkingObjects *owners;
@end

@implementation Dog
+ (NSDictionary *)linkingObjectsProperties {
    return @{
        @"owners": [RLMPropertyDescriptor descriptorWithClass:Person.class propertyName:@"dogs"],
    };
}
@end

从这一点开始,您只需查询Dog的ID,然后查找owners属性以获取所有者(如果它只是一个所有者,则它是一个元素的数组。)

详细信息在文档中:https://realm.io/docs/objc/latest/#inverse-relationships