Swift+Realm1.0.1+Alamofire(一)

Q:使用realm继承的object不能实现归档解档?

required init?(coder aDecoder: NSCoder) {
        self.init()
        self.name = aDecoder.decodeObjectForKey("name") as! String
        self.updated = aDecoder.decodeObjectForKey("updated") as! NSDate
    }

当实现上面的方法的时候xcode会强制性的向你提出还需要实现其他几个init方法,对,这没错,但是当你实现了

    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基础知识

    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创建一个便利构造器,来方便的根据我们的需求定义创建init()方法,这也是工厂模式的好处。

关于realm的更多坑

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Realm是由Y Combinator公司孵化出来的一款可以用于iOS(同样适用于Swift&Objective-...
    小歪子go阅读 2,293评论 6 9
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,972评论 25 709
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 1,450评论 2 4
  • 和Y上次的相聚是春节前的事了。那时,ta家电脑有点小毛病,导致电脑运行很慢,ta以为中了病毒,也认为电脑配置太低,...
    绿萝宝贝阅读 369评论 7 7
  • ​​​ 喝咖啡这件小事从开始时就是“先加后减”:从入门级的加法,黑咖啡的苦必须依赖奶与糖加以调和。之后又晋级为减法...
    撸熄阅读 428评论 0 1