我的问题:
>昨天,我将我的领域框架从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 }