Realm数据库对象似乎是空的,但后来却不是

我正在使用Realm进行一个简单的小项目。 我正在使用最新版本的框架(昨天从Github编译)和当前AppStore版本的Xcode和Swift 2.1。

我正在通过prepareForSegue()的segue将Realm数据库对象从一个视图控制器移交给另一个视图控制器,以便对其进行编辑(并填写当前值)。

不知何故,目标视图控制器中的对象似乎存在问题。 当我只是在目标视图控制器中print()对象时(在viewDidLoad()或我计划使用它的任何方法中),对象在控制台中正确显示如下:

 Object { name = asdf value = 8 } 

等等。

如果我尝试访问这些值(即使在前一行或下一行)并将它们分配给另一个变量,如myValue = objectToEdit.value我得到0。

通过使用断点进入调试代码,可以在调试器中显示所有值为空(“”)或0的对象,具体取决于类型。 不过,出于某些原因,不知何故Strings被抓出来了,我可以使用myString = objectToEdit.name访问和打印它们,而调试器显示name = (String) "" ,声称它是空的。

当我在第一个视图中从数据库中获取数据库对象时,已经发生了相同的行为。 直接的想法是,值确实为0并且只保存了字符串,但print()方法则另有说明。

任何人都可以解释这种奇怪的行为,也许可以告诉我哪些地方忽略了什么? 我现在怀疑这是框架的一些内部问题,但我不确定。 如果需要,我当然会更新更多代码或回答问题。

当我注意到奇怪的是,这些值是我在模型定义中放入的“默认”值时,我发现了问题。

出于某种原因,我没有在某些属性上使用dynamic声明,如下所示:

 class myObject: Object { dynamic var name = "" var value = 0 } 

这导致在视图控制器中创建的新Object具有这些标准值,并且我总是得到0,但另一方面可以得到正确的字符串。

在变量声明中添加dynamic修复了我的问题。

谢谢你的回答。

在调试代码时,您将需要LLDB插件才能看到正确的值。 按照第一个代码注释中的建议安装它,或者只执行下面的脚本:

 mkdir -p ~/Library/Application\ Support/Realm wget -O ~/Library/Application\ Support/Realm/rlm_lldb.py https://raw.githubusercontent.com/realm/realm-cocoa/master/plugin/rlm_lldb.py touch ~/.lldbinit grep -q "rlm_lldb.py" ~/.lldbinit || echo "command script import "~/Library/Application Support/Realm/rlm_lldb.py" --allow-reload" >> .lldbinit