2015-10-30 66 views
1

我是iOS开发人员和swift的新手,我使用Realm作为我的swift项目。Realm对象子类的实例在初始化时为null

首先,我创建领域对象的一个​​子类:

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 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.io下载)

基地SDK:iOS的9.1

部署目标:iOS 9

+0

根据Realm文档,尝试替换变量声明: var变量# 与: 'dynamic var variable'。 – zuziaka

回答

0

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

此外Realm不支持枚举。您需要将您的财产ClassA.propA声明为Int和使用rawValue初始化它的默认值:

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

一对一关系必须始终标记为可选。在这里属于ClassD.aB