Objective-C中非托管RLMObjects中的RLMArray属性

时间:2017-04-26 17:40:09

标签: objective-c realm

我无法在任何地方找到一个好的示例代码....但我发现的信息是矛盾和令人困惑的......

@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 个答案:

答案 0 :(得分:1)

好吧,我跟踪了问题,并通过一些反复试验确定问题是RLMArray属性的属性属性。

更改

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

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

似乎已经解决了这个问题。我特别相信&#39; copy&#39;属性。

现在,我知道Realm文档说这些属性被忽略而不需要,但是我使用的lint检查器想要它们......并且因为它们被忽略了#34;什么是伤害?

好吧,它们在普通的Realm属性上被忽略,但在RLMArray属性上它们不会被忽略,然后出现问题。

希望这将有助于将来的其他人并节省一些时间。