2016-05-17 105 views
1

如果我希望有一個具有相同用戶模型的Realm數組,則會發生異常。 RLMException(@"RLMArray properties require a protocol defining the contained type - example: RLMArray<Person>."); 那麼是否有解決方法?如何在Realm中實現遞歸關係如下?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) 

回答

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 
+0

領域文檔說,我們應該在模型界面的底部添加宏。 是的,前向聲明是除了在頂部添加宏之外的解決方案。謝謝你。 –

1

我認爲術語是「逆關係」,我從未試圖引用,並用相同的類的嵌套對象對象。 但在Realm紀錄片中,他們有一個「狗」和「所有者」的例子。 業主可以有狗,狗可以有業主,他們有一個「反向關係」

它應該是這樣的:

@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 

裁判:https://realm.io/docs/objc/latest/#relationships

+0

我覺得這個解決方案還應該工作基於一個更清晰的例子本文 https://realm.io/news/realm-objc-swift-0.100.0/在 –