我有一个带有属性的简单协议:
@protocol StopsSource <NSObject>
@property (retain,readonly) NSArray * stops;
@end
我在其他地方添加了一个键值观察器来监听“stops”属性的变化:
id<StopsSource> source = ...
[source addObserver:self
forKeyPath:@"stops"
options:NSKeyValueObservingOptionNew
context:nil];
代码按预期工作,因为当“停止”属性更改时,我得到了 observeValueForKeyPath 事件。真正的烦恼是 addObserver 调用上的编译器警告:
warning: '-addObserver:forKeyPath:options:context:' not found in protocol(s)
'addObserver' 方法在 NSObject 的类别中定义:
@interface NSObject(NSKeyValueObserverRegistration)
有没有办法让 XCode 放弃这个警告?我的理解是协议不能采用类别,所以我不确定如何将 NSKeyValueObserverRegistration 方法引入我的协议中,而不是将声明复制到协议本身中,这似乎是一种 hack。
我知道这是一个微不足道的问题,因为它只是一个编译器警告,但我很想知道是否有一种“正确”的方法来解决这个问题。