领域数据库对象似乎是空的,但不是

时间:2015-10-27 13:31:39

标签: ios swift 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()方法则另有说明。

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

感谢您的回答。

答案 1 :(得分:0)

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

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