我有一個簡單的協議與一個屬性:鍵 - 值觀察在協議對象:編譯器警告上的addObserver:
@protocol StopsSource <NSObject>
@property (retain,readonly) NSArray * stops;
@end
我添加一個鍵值觀察者別處聽更改「停止」屬性:
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方法帶入我的協議,而不是將聲明覆制到協議本身,這似乎是一個黑客。
我知道這是一個微不足道的問題,因爲它只是一個編譯器警告,但我很想知道是否有「正確」的方法來解決這個問題。
見Abizern的回答的重要信息,但您的具體問題,用NSObject替換'id' * source = ... –
2009-04-12 02:13:18