ios - Realm Object 子类的实例在初始化时为 null

标签 ios swift realm

我是 iOS 开发和 swift 新手,我在我的 swift 项目中使用 Realm。

首先,我创建 Realm 对象的子类:

enum EnumA: Int {
    case ValueA
    case ValueB
}

class ClassA: Object {

    var propA: EnumA = EnumA.ValueA
    var propB: Double = 0.0

}

然后我还有另一个类:

class ClassB: Object {

    var id = 0
    var name: String = ""
    let aLotOfA = List<ClassA>()

    override static func primaryKey() -> String? {
        return "id"
    }

}

然后我在某处创建 ClassB 的实例:

class ClassC: NSObject {
    static let cManager = ClassC()

    func defaultB() -> ClassB {
        let instanceA = ClassA()
        let instanceB = ClassB()
        instanceB.name = "String"
        instanceB.aLotOfA.append(instanceA)
        return instanceB
    }
}

我有这个类(class):

class ClassD: Object {
    let aB: ClassB = ClassC.cManager.defaultB()
}

当我调用defaultB()时,第一行(let instanceA = ClassA())使instanceA为空。我不断在控制台中收到这样的消息:

"Object type '(null)' does not match RLMArray type 'ClassA'."

"The `ClassD.aB` property must be marked as being optional."

我不知道这里出了什么问题。请有人帮助我,非常感谢。

还有我的环境:

Mac OS X 10.11.1 + Xcode 7.1

Realm是最新的(刚刚从realm.io下载)

基础 SDK:iOS 9.1

部署目标:iOS 9

最佳答案

正如 zuziaka 所指出的,您将需要使用 dynamic var 声明所有持久属性。这不适用于 ListRealmOptional 属性。

此外 Realm 不支持枚举。您需要将属性 ClassA.propA 声明为 Int 并使用 rawValue 初始化其默认值:

class ClassA {
    var propA: Int = EnumA.ValueA.rawValue
    …
}

一对一关系必须始终标记为可选。这就是属性 ClassD.aB 的情况。

关于ios - Realm Object 子类的实例在初始化时为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33440054/

相关文章:

Swift - Required Initializer 与 Delegating initializer 之间的一点混淆

ios - 文件从应用程序中删除,但仍然占用相同的空间?

java - 如何在 Realm 中存储枚举?

swift - RealmSwift travis 构建时间

ios - 在应用程序设置中创建

objective-c - 私有(private)枚举声明

ios - 解析 Koloda 库上的数据 - 无法在 View 中显示

ios - RealmSwift 导入错误

ios - MicroBlink SDK 的 USDL 组合识别器 documentDataMatch 返回始终 true

ios - 如何从推送通知跳转到复杂 Storyboard 中的任意场景?