2016-09-22 6 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:)이다. 참고 of:, 아니 ofObject: 있습니다. 귀하의 방법은 필요한 방법의 구현이 아닙니다. 나는 당신이 override이라는 적절한 이름의 메소드를 표시 할 필요가 있다고 믿는다. (그리고 컴파일러는 당신이 그 이름을 잘못 사용했다는 표시가 없으면 빠져 나갈 수있게 해준다.)

+0

작동합니다. 감사!! – lkahtz

관련 문제