2010-07-12 61 views
0

我試圖圍繞NSNotification包裹我的頭,但似乎無法讓它工作。認爲我誤解了如何註冊通知。註冊一個NSNotification的bool

我有一個bool作爲我的連接管理器類中的一個屬性。在初始化我有幾臺服務器進行身份驗證和檢查,如果我能訪問外部URL(應用程序將主要在公司內部使用和外部連接不總是可能的)

的BOOL屬性將YES改爲NO如果它無法訪問連接,並且可以隨時響應,我認爲最好在它發生更改時註冊一個通知。該屬性稱爲externalConnectionAvailable

[ConnectionManager addObserver:self forKeyPath:@"externalConnectionAvailable" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL]; 

,並有方法:

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    NSLog(@"observer called"); 
} 

但是,這不會被調用。我在做一些完全錯誤的事情嗎?

感謝

+0

是ConnectionManager的一個實例或類?我們通常用小寫字母開始變量名稱。請添加實際更改值的代碼,如果不合成,請添加值吸取器和設置器。 – tonklon 2010-07-12 07:08:29

+0

ConnectionManager是其中的類,不知道爲什麼我用它,想不出其他什麼。實際上應該是自我,如果有什麼 – Rudiger 2010-07-12 07:44:27

回答

0

這是一件非常愚蠢的。我只是改變屬性通過調用externalConnectionAvailable不self.externalConnectionAvailable

0

在此聲明:

[ConnectionManager addObserver:self forKeyPath:@"externalConnectionAvailable" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL]; 

假設你繼「可可路」,用通常的命名方案類和對象的情況下,你似乎是想添加整個類的觀察者,而不是對象實例。

你應該有類似

ConnectionManager *connectionManagerInstance = // initialize manager... 
... 
[connectionManagerInstance addObserver:self forKeyPath:@"externalConnectionAvailable" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL]; 
+0

這是否有一個很好的理由被拒絕? – 2010-07-12 05:39:11

+0

不是我,ConnectionManager實際上是創建它的類,所以技術上應該是自我的,如果有的話,但我懷疑它會起作用。對不起,非常累 – Rudiger 2010-07-12 07:49:11

+0

那麼你是說我只能在對象實例上有一個KVO?爲什麼不是一個班級內的財產? – Rudiger 2010-07-12 23:21:29

相關問題