Swift3 Can';t在用户默认值中存储对象

Swift3 Can';t在用户默认值中存储对象,swift3,Swift3,我有一个类符合NSCoding: class Middleware : NSObject, NSCoding { var name: String var uri: String // MARK: NSCoding required init?(coder aDecoder: NSCoder) { name = aDecoder.decodeObject(forKey: "name") as! String uri = aDe

我有一个类符合
NSCoding

class Middleware : NSObject, NSCoding {

    var name: String
    var uri: String

    // MARK: NSCoding

    required init?(coder aDecoder: NSCoder) {
        name = aDecoder.decodeObject(forKey: "name") as! String
        uri = aDecoder.decodeObject(forKey: "uri") as! String
    }

    func encode(with: NSCoder) {
        with.encode(name, forKey: "name")
        with.encode(uri, forKey: "uri")
    }
}
在UserDefaults中存储该类失败:

userDefaults.set(Middleware(name: "Volkszaehler Demo", uri: "http://demo.volkszaehler.org/middleware.php"), forKey: "middlewares")
给出:

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试插入密钥中间件的非属性列表对象”


明白-自定义对象需要首先通过编码器:

let encodedData = NSKeyedArchiver.archivedData(withRootObject: middleware)

然后可以存储encodedData。

我得到
[\u SwiftValue encodeWithCoder:]:无法识别的选择器发送到实例