2015-10-30 3 views
1

Я новичок в разработке iOS и быстро, и я использую Realm для моего быстрого проекта.Объект подкласса объекта Realm null, когда init

Во-первых, создать подкласс 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 ClassD: Object { 
    let aB: ClassB = ClassC.cManager.defaultB() 
} 

Когда я звоню defaultB(), первая строка (let instanceA = ClassA()) делает экземплярA null. Я продолжаю получать сообщение в консоли, как это:

"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)

Base SDK: IOS 9.1

Развертывание Цель: iOS 9

+0

Согласно данным Realm docs, попробуйте заменить объявления переменных: 'var variable' с: ' dynamic var variable'. – zuziaka

ответ

0

Как указано zuziaka, вам необходимо будет объявить все ваши сохраненные свойства с помощью dynamic var. Это не относится к List и RealmOptional.

Кроме того, Realm не поддерживает перечисления. Вам нужно будет объявить свойство ClassA.propA в Int и использовать rawValue инициализировать его значение по умолчанию:

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

к одному отношения должны быть всегда помечены как необязательные. Вот здесь дело для имущества ClassD.aB.

Смежные вопросы