ios - Realm 数据库对象似乎是空的,但事实并非如此

标签 ios swift realm

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

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

不知何故,目标 View Controller 中的对象似乎有问题。当我简单地 print() 目标 View Controller 中的对象时(在 viewDidLoad() 或我计划在其中使用它的任何方法中),该对象是正确的在控制台中显示如下:

Object {
name = asdf
value = 8
}

等等。

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

通过使用断点进入代码来调试代码会在调试器中显示所有值为空 ("") 或 0 的对象,具体取决于类型。尽管如此,出于某种原因,字符串还是被从中获取了,我可以使用 myString = objectToEdit.name 访问并打印它们,而调试器显示 name = (String) "",声称它是空的。

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

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

最佳答案

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

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

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

这导致在 View Controller 中创建的新对象具有这些标准值,我总是得到 0,但另一方面可以获得正确的字符串。

dynamic 添加到变量声明中解决了我的问题。

感谢您的回答。

关于ios - Realm 数据库对象似乎是空的,但事实并非如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369371/

相关文章:

ios - SKPhysicsContactDelegate 协议(protocol)方法未被调用

ios - 带有自定义 uitableViewCell.xib 的 Swift UIPickerView

C++ 加密库在 Apple Swift 中的使用

java - Realm createOrUpdateAllFromJson 创建 RealmModel 对象而不持久化?

ios - 设置一些气泡的最小宽度

ios - Swift 中全局变量和函数的最佳实践是什么?

ios - Branch.io(深层链接事件)不能在 iOS12 swift 上运行?

ios - 具有多个 NSTextContainer 的 NSLayoutManager 导致 UITextViews 不可选择/不可编辑

xcode - Realm - 模块文件是由旧版本的编译器创建的

ios - 无法在 Swift 2.0 中通过 CocoaPods 安装 Realm 库