使用NCoding归档进行存储数据时候报错

问题:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Demo1.UserInfo encodeWithCoder:]: unrecognized selector sent to instance 0x610000470e40'

这表示没有找到encodeWithCoder这个方法,有以下几种情况

①没有继承NCoding这个类

②没有写encodeWithCoder这个方法(swift3.0中已改成encode())

解决方式:在UserInfo类中继承NCoding协议,并实现两个方法,具体如下

import UIKit

class UserInfo: NSObject ,NSCoding{
    var name:String
    var age:String
    
    //构造方法
    init(name:String = "",age:String = "") {
        self.name = name
        self.age = age
    }
    
    //解析方法
    required init(coder aDecoder:NSCoder) {
        self.name = aDecoder.decodeObject(forKey: "Name") as! String
        self.age = aDecoder.decodeObject(forKey: "Age") as! String
    }

    //将信息编码成object
    func encode(with aCoder: NSCoder) {
        aCoder.encode(name, forKey: "Name")
        aCoder.encode(age,forKey:"Age")
    }
}
原文地址:https://www.cnblogs.com/igeniuswwh/p/5962266.html