gpt4 book ai didi

ios - 初始化时 Realm 对象子类的实例为空

转载 作者:行者123 更新时间:2023-11-28 06:56:41 24 4
gpt4 key购买 nike

我是 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 对象子类的实例为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33440054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com