如果我希望拥有相同用户模型的Realm数组,则会发生异常。
RLMException(@"RLMArray properties require a protocol defining the contained type - example: RLMArray<Person>.");
那么有一个解决方法吗?如何在Realm中实现递归关系如下?
#import <Realm/Realm.h>
@interface User : RLMObject
@property NSInteger userId;
@property NSString *displayName;
@property RLMArray<User> *friends;
- (instancetype)initWithDictionary:(NSDictionary *)data;
@end
RLM_ARRAY_TYPE (User)
答案 0 :(得分:2)
如异常所示,您需要声明一个协议来定义RLMArray
的包含类型。这就是RLM_ARRAY_TYPE
宏的作用。这里的特殊之处在于您需要在接口声明之前放置此声明,这可以通过使用User
预先声明@class
类型来完成。你可以这样做:
#import <Realm/Realm.h>
@class User;
RLM_ARRAY_TYPE (User)
@interface User : RLMObject
@property NSInteger userId;
@property NSString *displayName;
@property RLMArray<User> *friends;
- (instancetype)initWithDictionary:(NSDictionary *)data;
@end
答案 1 :(得分:1)
我认为术语是&#34;反向关系&#34; ,我从未尝试使用同一类的嵌套对象进行引用和对象。 但在Realm纪录片中,他们有一个例子和&#34; dog&#34;和&#34;所有者&#34;。 主人可以养狗,狗可以拥有主人,他们有&#34;反向关系&#34; 。
它应该是这样的:
@interface Dog : RLMObject
@property NSString *name;
@property NSInteger age;
@property (readonly) RLMLinkingObjects *owners;
@end
@implementation Dog
+ (NSDictionary *)linkingObjectsProperties {
return @{
@"owners": [RLMPropertyDescriptor descriptorWithClass:Person.class propertyName:@"dogs"],
};
}
@end