微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/iOS/329902.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐