2011-10-21 65 views
1

假設我有一個Player實例,並且我想添加一個觀察者到他們的分數,所以我可以更新iOS應用程序中的分數顯示。我相信我應該調用看起來像這樣添加觀察者的方法:如何調試NSObject觀察者?

[[self.game player] addObserver:self 
        forKeyPath:@"score" 
         options:NSKeyValueObservingOptionNew 
         context:nil]; 

在同一個班級,那我也定義了一種方法,應該收到此消息:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 

然而,我放在這個方法中的斷點永遠不會被擊中。

我想知道如何診斷此問題。我已經驗證玩家實例已經填充,並且當分數更新時,同一個實例被更新。

如果有幫助,我剛剛將我的項目轉換爲ARC,但上面的代碼是新的,並且從未工作過。

回答

1

您的關鍵路徑「分數」不符合KVO標準(您是不是爲*分數定義@property?)或者添加觀察者方法永遠不會被調用。您可以通過在您的第一個代碼段中的代碼行中放置一個斷點並驗證觀察者確實正在註冊來輕鬆診斷後者。

+0

我調用[[self.game player] valueForKey:@「score」],因此返回零,所以我猜測我的應用程序有其他錯誤。感謝您的時間,我懷疑我已經浪費了。 –

+0

好的,事實證明,viewDidLoad在didFinishLaunchingWithOptions之前執行,所以我依賴於當時沒有的東西。在這裏,無論如何都要有一些聲譽。 –