致命错误:使用未实现的初始化'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框架,这意味着我需要EncodeDecode来交换数据。
  • 我试图改变或添加其他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") } } 

请教我如何解决这个问题。

非常感谢您的指导和时间。

伊桑·乔

我前几天遇到了同样的问题:

基本上你不应该创build“init”方法,但你可以创build“方便初始化”方法。 在这种情况下,你不能调用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

你需要像这样实现init:

 init(object:schema:) { super.init(object: object, schema: schema) } 

github上有各种各样的post。

我结束了需要添加:

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