[英]Swift - `NSUnknownKeyException`: calling `setValue:forKey` on NSObject with optional values in dictionary
[英]Subclassing a subclass of NSObject in Swift (iOS) and setValue forKey
我正在編寫一個基模型類,它是 NSObject 的子類,然后每個模型都將是該模型的子類。
創建模型時,我提供了一個Dictionary<String, AnyObject>
屬性來組成模型屬性。
class Model: NSObject {
var hi: String = "hi"
init(attributes: Dictionary<String, AnyObject>) {
super.init()
for (index, attribute) in attributes {
self.dynamicType.setValue(attribute, forKey: index)
}
}
}
class User: Model {
var name: String = "Donatello"
}
當我對NSObject
的直接子類執行以下操作時,它可以工作:
let model = Model(attributes: ["hi": "bonjour!"])
print(model.hi) // prints "bonjour!"
甚至在User
上做同樣的事情,從NSObject
繼承的類的子類工作:
let model = User(attributes: ["hi": "subclass bonjour!"])
print(model.hi) // prints "subclass bonjour!"
但是如果我嘗試設置僅在此子類中可用的屬性,我會得到經典的this class is not key value coding-compliant for the key name.
例如:
let model = User(attributes: ["name": "Raphael"])
導致錯誤。
這個對象作為從NSObject繼承的類的子類,應該自動從NSObject繼承時,為什么會出現這個錯誤。
這是我對子類化的基本理解的問題嗎?
問題在於您對更基本的東西的理解:類和實例。 改變:
self.dynamicType.setValue(attribute, forKey: index)
到:
self.setValue(attribute, forKey: index)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.