我正在使用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()
方法则另有说明。
任何人都可以解释这种奇怪的行为,也许可以告诉我哪些地方忽略了什么?我现在怀疑它是框架的一些内部问题,但我不确定。如果需要,我当然会更新更多代码或回答问题。
答案 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