美文网首页RealmiOS-swift
Swift+Realm1.0.1+Alamofire(一)

Swift+Realm1.0.1+Alamofire(一)

作者: 童星 | 来源:发表于2016-07-05 13:07 被阅读117次

    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的更多坑

    相关文章

      网友评论

        本文标题:Swift+Realm1.0.1+Alamofire(一)

        本文链接:https://www.haomeiwen.com/subject/jnphjttx.html