KVO无法正常工作:已收到邮件但未处理

在玩KVO时我遇到以下错误。 它只适用于UIViewController的子类吗?

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: ': An -observeValueForKeyPath:ofObject:change:context: message was received but not handled. Key path: name Observed object:  Change: { kind = 1; new = Test; } 

代码如下:

 import Foundation class User: NSObject { dynamic var name: String? } class object: NSObject { func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutableRawPointer) { print("Name changed") } } var user = User() var ob = object() user.addObserver(ob, forKeyPath: "name", options: NSKeyValueObservingOptions.new, context: nil) user.name = "Test" try user.name = "Test 2" user.removeObserver(ob, forKeyPath: "name") 

根据文档 ,方法的名称是observeValue(forKeyPath:of:change:context:) 。 注意of:不是ofObject:就像你一样。 您的方法不是所需方法的实现。 我相信你需要用override来标记正确命名的方法(并且编译器允许你离开的事实没有那个是你的名字错误的标志)。