【发布时间】:2013-11-16 01:16:17
【问题描述】:
我正在尝试在 iOS 中收听 UITextView 上的 editable 属性。在UITextView.h 的标头中,editable 属性定义为:
@property(nonatomic,getter=isEditable) BOOL editable;
为了监听 KVO 通知,我使用了 addObserver 模式,其中我将 keyPath 作为NSStringFromSelector(@selector(isEditable)) 传递,因此如果我使用未定义的选择器,Xcode 会警告我。注册isEditable 键路径顺利进行,但是在更改文本视图上的editable 属性后,我从未收到属性更改的通知。我正在注册观察者:
[self.textView addObserver:self
forKeyPath:NSStringFromSelector(@selector(isEditable))
options:NSKeyValueObservingOptionNew
context:KVOTestingTestsContext];
但是,如果我改为使用密钥路径 NSStringFromSelector(@selector(editable)),我确实会收到 KVO 通知,但 Xcode 会生成一条警告,指出我正在使用未声明的选择器“可编辑”。
我想知道是否有更好的模式,如果在应该使用自定义 getter 的情况下出现故障,我应该使用它。或者这是 Xcode / clang 中的错误?
【问题讨论】:
-
我创建了一个示例项目here,其中有a testcase 显示此失败。
标签: ios objective-c key-value-observing