2017-04-26 37 views
0

我找不到任何地方這一個很好的示例代碼....但我發現的信息是矛盾和困惑......RLMArray性能在Objective-C的非託管RLMObjects

@interface DAORealmMetadata : RLMObject 
@property (nonatomic, copy) NSString*  id; 
@end 
RLM_ARRAY_TYPE(DAORealmMetadata) 

@interface DAORealmBase : RLMObject 
@property (nonatomic, copy) NSString*  id; 
@property (nonatomic, copy) RLMArray<DAORealmMetadata*><DAORealmMetadata>*  metadata; 
@end 
RLM_ARRAY_TYPE(DAORealmBase) 

問: 上午我應該在DAORealmBase實現中添加@dynamic metadata ...還是不?

我試過了,沒有和最終結果相同......崩潰。

我創建的非託管對象與此代碼:

DAORealmBase* baseObj = [[DAORealmBase alloc] init]; 

DAORealmMetadata* metadataObj = [[DAORealmMetadata alloc] init]; 

[baseObj.metadata addObject:metadataObj]; 

問: 爲什麼最後一行導致崩潰/異常?

我只能假設,我「米做錯了什麼,但我找不到任何細節爲我做了什麼。

謝謝!

+1

你得到了什麼樣的崩潰? – marius

回答

1

嗯,我跟蹤這個問題了下來,並通過一些反覆試驗,確定該問題是在RLMArray屬性的屬性的屬性。

更改

@property (nonatomic, copy) RLMArray<DAORealmMetadata*><DAORealmMetadata>* metadata; 

@property RLMArray<DAORealmMetadata*><DAORealmMetadata>* metadata; 

似乎已經解決了這個問題。我特別相信'複製'屬性。

現在,我知道Realm文檔說屬性被忽略,不需要,但我使用的棉絨檢查器要求它們在那裏......並且由於它們被「忽略」,有什麼危害?

好吧,它們在正常的Realm屬性上被忽略,但是在RLMArray屬性中它們不會被忽略,並且會出現問題。

希望這將有助於未來的其他人,併爲他們節省一些時間。

+1

正確。我會爲文檔添加一個註釋,即非託管Realm對象的屬性屬性不會被忽略,因爲這些只是普通的舊NSObject。 – jpsim