【问题标题】:RLMArray properties in unmanaged RLMObjects in Objective-CObjective-C 中非托管 RLMObjects 中的 RLMArray 属性
【发布时间】:2017-04-26 17:40:08
【问题描述】:

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

@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];

问题: 为什么最后一行会导致崩溃/异常?

我只能假设我做错了什么,但我找不到任何关于我做错了什么的细节。

谢谢!

【问题讨论】:

  • 你遇到什么样的崩溃?

标签: objective-c realm


【解决方案1】:

好吧,我追踪到了问题所在,经过反复试验,确定问题出在 RLMArray 属性上的属性属性上。

变化

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

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

似乎已经解决了这个问题。我特别相信“复制”属性。

现在,我知道 Realm 文档说属性被忽略且不需要,但我使用的 lint 检查器希望它们在那里......并且由于它们被“忽略”,有什么害处?

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

希望这将在未来对其他人有所帮助并节省他们一些时间。

【讨论】:

  • 正确。我将在文档中添加一条注释,即非托管 Realm 对象不会忽略属性属性,因为它们只是普通的旧 NSObject。
猜你喜欢
  • 2011-11-23
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2012-12-25
  • 1970-01-01
相关资源
最近更新 更多