Неустранимая ошибка: использование нереализованного инициализатора 'init (realm: schema:)'

Мой номер:

  • Вчера я обновил структуру Realm от 0.91.5 до 0.92.0 для моего проекта (написанного в Swift). Я обнаружил, что команда Realm уже отделила часть Swift и часть Objective-C от предыдущей цельной Cocoa Framework, команда также изменила синтаксис. И я уже исправил свой код как последний синтаксис Realm, но у меня все еще были проблемы с init().

Ошибка:

  • Компилятор выкинул ошибку: fatal error: use of unimplemented initializer init(realm:schema:) for CardModel.
  • Дело в том, что эта ошибка не произошла с предыдущей версией Realm.
  • Я использовал структуру MultiPeer Connectivity для проекта, что означает, что мне нужно Encode и Decode для обмена данными.
  • Я попытался изменить или добавить другие init() в CardModel, но это не сработало.

Мой код:

import RealmSwift

class CardModel: Object {
dynamic var cardID: String = ""
dynamic var firstName: String = ""
dynamic var lastName: String = ""
dynamic var userImage = NSData()
dynamic var status: String = ""
dynamic var cardType: Int = 1
dynamic var cardDate = NSDate()

override init() {
    super.init()
}

init(coder aDecoder: NSCoder) {
    super.init()
    self.userImage = aDecoder.decodeObjectForKey("userImage") as! NSData
    self.cardID = aDecoder.decodeObjectForKey("cardID") as! String
    self.firstName = aDecoder.decodeObjectForKey("firstName") as! String
    self.lastName = aDecoder.decodeObjectForKey("lastName") as! String
    self.status = aDecoder.decodeObjectForKey("status") as! String
    self.cardType = aDecoder.decodeObjectForKey("cardType") as! Int
    self.cardDate = aDecoder.decodeObjectForKey("cardDate") as! NSDate
}

func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(self.userImage, forKey: "userImage")
    aCoder.encodeObject(self.cardID, forKey: "cardID")
    aCoder.encodeObject(self.firstName, forKey: "firstName")
    aCoder.encodeObject(self.lastName, forKey: "lastName")
    aCoder.encodeObject(self.status, forKey: "status")
    aCoder.encodeObject(self.cardType, forKey: "cardType")
    aCoder.encodeObject(self.cardDate, forKey: "cardDate")
  }  
}


Пожалуйста, научите меня, как решить эту проблему.

Большая оценка вашего гида и времени.

Этан Джо

Ответ 1

Я столкнулся с той же проблемой на днях:

В принципе, вы не должны создавать методы "init", но вы можете создавать методы "удобства init". В этом случае вы не можете вызвать super.init(), но вы вызываете что-то вроде self.init()

поэтому в вашем случае выше вы должны удалить переопределить init(), а другой init может быть:

convenience required init(coder aDecoder: NSCoder) {
    self.init()
    self.userImage = aDecoder.decodeObjectForKey("userImage") as! NSData
    self.cardID = aDecoder.decodeObjectForKey("cardID") as! String
    self.firstName = aDecoder.decodeObjectForKey("firstName") as! String
    self.lastName = aDecoder.decodeObjectForKey("lastName") as! String
    self.status = aDecoder.decodeObjectForKey("status") as! String
    self.cardType = aDecoder.decodeObjectForKey("cardType") as! Int
    self.cardDate = aDecoder.decodeObjectForKey("cardDate") as! NSDate
}

Дополнительная информация: https://github.com/realm/realm-cocoa/issues/1849

Ответ 3

Мне пришлось добавить:

required convenience init?(_ map: Map) {
    self.init()
}