Q:使用realm繼承的object不能實現(xiàn)歸檔解檔?
required init?(coder aDecoder: NSCoder) {
self.init()
self.name = aDecoder.decodeObjectForKey("name") as! String
self.updated = aDecoder.decodeObjectForKey("updated") as! NSDate
}
當實現(xiàn)上面的方法的時候xcode會強制性的向你提出還需要實現(xiàn)其他幾個init
方法伯襟,對啃匿,這沒錯,但是當你實現(xiàn)了
required init(realm: RLMRealm, schema: RLMObjectSchema) {
fatalError("init(realm:schema:) has not been implemented")
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
fatalError("init(realm:schema:) has not been implemented")
}
required init() {
fatalError("init() has not been implemented")
}
上面這三個方法之后雷蹂,然后run伟端,就會crash了。
解決辦法:去掉你自己自定義的init方法匪煌,使用convenience
來定義你的init方法
上面的解決方法是:在required
前面添加convenience
责蝠,不知道convenience
是干什么的同學,自己去補充swift基礎(chǔ)知識
convenience required init?(coder aDecoder: NSCoder) {
self.init()
self.name = aDecoder.decodeObjectForKey("name") as! String
self.updated = aDecoder.decodeObjectForKey("updated") as! NSDate
}
舉一反三:繼承了realm的Object對象之后萎庭,我們不需要再自己定義新的init()方法了霜医,但是我們可以使用convenience創(chuàng)建一個便利構(gòu)造器,來方便的根據(jù)我們的需求定義創(chuàng)建init()方法驳规,這也是工廠模式的好處肴敛。