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