【发布时间】:2015-06-24 05:31:41
【问题描述】:
我试图将一些对象保存在数组中,但我的对象使用的是继承属性 但是当试图读取它说的对象时
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -decodeObjectForKey: cannot be sent to an abstract object of class NSCoder: Create a concrete instance!'
结构是
Service(SuperClass)
Service1(Subclass)
Service2
Service3
这样我就使用了这段代码
var S1:Service1 = Service1()
S1.apiKey = Apikey.text!
TableViewController.agregar(S1)
let datos = NSKeyedArchiver.archivedDataWithRootObject(TableViewController.Servicios!)
NSUserDefaults.standardUserDefaults().setObject(datos, forKey: "ServiciosGuardados")
NSUserDefaults.standardUserDefaults().synchronize()
这是类函数
class Servicio:NSObject, NSCoding{
var nombre:String = "null"
var tipo:Int = 0
override init() {}
required init(coder aDecoder: NSCoder = NSCoder.empty()) {
self.nombre = aDecoder.decodeObjectForKey("nombre") as! String
self.tipo = aDecoder.decodeObjectForKey("tipo") as! Int
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(nombre, forKey: "nombre")
aCoder.encodeObject(tipo, forKey: "tipo")
}
-我的问题出在从 Servicio 继承的 Service1 中
class Service1: Servicio {
var apiKey = "null"
override init() {
super.init(coder: NSCoder())
}
required init(coder aDecoder: NSCoder) {
super.init(coder: NSCoder())
if let apiKey = aDecoder.decodeObjectForKey("apiKey") as? String {
self.apiKey = apiKey
}
}
override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.apiKey, forKey: "apiKey")
}
【问题讨论】:
标签: ios swift nsuserdefaults nscoder nskeyedunarchiver