【问题标题】:Realm RLMArray is nil领域 RLMArray 为零
【发布时间】:2017-07-01 15:18:34
【问题描述】:

由于某种原因,当我运行我的程序时,我的 RLMArray 为零。 我可以在 RLM 浏览器中看到数据,并且链接得当。

这里有什么我可能会遗漏的吗?

@interface HMFAlbum : RLMObject

@property NSInteger persistentId;

@property RLMArray<HMFTrack> *tracks;
@property RLMArray<HMFRange> *ranges;

@end

@interface HMFTrack : RLMObject

@property NSInteger persistentId;
@property HMFAlbum *album;

@end

RLM_ARRAY_TYPE(HMFTrack)

@interface HMFRange : RLMObject

@property NSInteger persistentId;
@property (readonly) RLMLinkingObjects *albums;

@end

RLM_ARRAY_TYPE(HMFRange)

【问题讨论】:

  • 您如何看待程序中的 nil 值?您是在调试器中查看实例变量、打印出对象的描述、打印出访问属性时返回的值,还是完全在做其他事情?
  • 调试器显示为零。如果我要求 Album.tracks.count 我得到正确的值。但如果我执行 Album.tracks.firstObject 我得到一个空白对象。

标签: objective-c realm


【解决方案1】:

预计持久化RLMObject 实例的实例变量将为nil,因为属性getter 直接从Realm 文件中读取值。实例变量仅用于保存到 Realm 之前的对象,并在此之后保持 nil

Realm 文档的Debugging 部分涉及该主题,并提到了一个 LLDB 脚本,该脚本可用于在 Xcode 中调试时显示持久对象的属性值。 NSLog 在使用 %@ 格式说明符格式化对象时使用的模型类上的 -description 方法也将按预期显示属性值。

【讨论】:

  • 好吧,这更有意义。我想我的问题是我有一些需要加载的数据没有存储在数据库中。例如,我的跟踪对象存储磁盘上文件的路径。我从资产文件中加载标题、艺术家等。
  • 我不知道为什么会有问题。如果我正确理解了您最初的问题,那只是调试器中的显示问题,而不是您的应用程序行为的实际问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多