2016-09-22 20 views
0

與KVO一起玩時遇到以下錯誤。它只適用於UIViewController的子類嗎?KVO不工作:郵件已收到但未處理

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<sort.object: 0x100a074e0>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled. 
Key path: name 
Observed object: <sort.User: 0x100a06bb0> 
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") 

回答

1

根據該docs,該方法的名稱爲observeValue(forKeyPath:of:change:context:)。請注意0​​,而不是您所擁有的ofObject:。您的方法不是所需方法的實現。我相信你需要用override(以及編譯器讓你沒有這個事實的方式逃脫是一個標誌,你的名字是錯誤的)這個事實來標記正確命名的方法。

+0

它的工作原理。謝謝!! – lkahtz

相關問題