【发布时间】:2017-12-06 01:55:38
【问题描述】:
我的问题是是否可以在 Swift 上的 Singleton 属性上使用 KVC。我在一个类上测试 KVC 能够让它工作,但决定看看它是否在 Singleton 类上工作。
我遇到了一个错误,指出我的 Singleton 的“共享”属性不符合 KVC。
class KVOObject: NSObject {
@objc static let shared = KVOObject()
private override init(){}
@objc dynamic var fontSize = 18
}
override func viewDidLoad() {
super.viewDidLoad()
addObserver(self, forKeyPath: #keyPath(KVOObject.shared.fontSize), options: [.old, .new], context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(KVOObject.shared.fontSize) {
// do something
}
}
我目前收到以下错误:
NetworkCollectionTest[9714:452848] *** 由于未捕获的异常 'NSUnknownKeyException' 导致应用程序终止,原因:'[ addObserver: forKeyPath:@"shared.fontSize" options:3 context:0x0] 被发送到一个对象,该对象是“共享”属性不符合 KVC。'
【问题讨论】:
-
密钥路径是
#keyPath(KVOObject.fontSize)吗? -
使用
#keyPath(KVOObject.fontSize)确实有效,但是当属性KVOObject.shared.fontSize发生更改时,不会观察到 -
行得通!谢谢