【发布时间】:2018-03-08 12:39:49
【问题描述】:
我想使用 self.setValue(, forKey: ) 直接在NSObject 中设置值,这时候给我一个错误。 like that
2018-03-08 17:36:36.723485+0530 BaseProject[20631:312969] *** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<_ttgc11baseproject8datarootcs_4root_0x600000452840> setValue:forUndefinedKey:]: 此类不符合键数据的键值编码。'
当我使用像 var data: [T] = [] 这样的 Generic T 设置值时,应用程序崩溃了,我像 var data: [Root] = [] 这样设置类名,然后就可以正常工作了。
我的代码是
protocol AGMappable {
init(with responseDict: [String: AnyObject])
}
我的模型类是
class Root: NSObject, AGMappable {
var avatar: String = ""
var id: Int = 0
var first_name: String = ""
var last_name: String = ""
required init(with responseDict: [String: AnyObject]) {
super.init()
avatar = responseDict["avatar"] as? String ?? ""
}
}
使用 setValue(,forKey:) 设置值
class DataRoot<T: AGMappable>: NSObject, AGMappable{
var page: Int = 0
var per_page: Int = 0
var total: Int = 0
var total_pages: Int = 0
var data: [T] = []
required init(with responseDict: [String: AnyObject]){
super.init()
if let datastr = responseDict["data"] as? [[String : AnyObject]] {
var temp: [T] = []
for v in datastr {
temp.append(T(with: v as [String: AnyObject]))
}
self.setValue(temp, forKey: "data") // Here error
}
}
}
【问题讨论】:
-
为了更好地理解问题尝试使用正确的方法并查看错误
setValue(temp, forKey: #keyPath(data))
标签: ios swift generics nsobject