ios – 致命错误:使用未实现的初始化程序’init(realm:schema :)’

我的问题:

>昨天,我将我的领域框架从0.91.5更新为0.92.0,用于我的项目(以Swift编写).我发现领域团队已经将Swift部分和Objective-C部分与之前的完整Cocoa框架分开,团队也改变了语法.我已经将我的代码修改为最新的Realm语法,但是我仍然有一些init()的麻烦.

错误

>编译器抛出错误:致命错误:对CardModel使用未实现的初始化程序init(realm:schema :).
>事实是这个错误并没有发生在以前版本的Realm.
>我使用MultiPeer连接框架进行项目,这意味着我需要编码和解码才能交换数据.
>我尝试更改或添加其他的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")
  }  
}

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

对您的指导和时间感到非常欣赏.

Ethan Joe

解决方法

另外一天遇到同样的问题:

基本上你不应该创建“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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...