2016-10-15 53 views
1

我必须符合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'而终止应用程序,原因:'尝试为键中间件插入非属性列表对象'

回答

1

得到它 - 自定义对象需要通过编码器首先:然后

let encodedData = NSKeyedArchiver.archivedData(withRootObject: middleware) 

encodedData可以存储。

+0

我得到'[_SwiftValue encodeWithCoder:]:无法识别的选择器发送到实例' – Cmag