2012-09-12 39 views
3

我試圖在iOS應用程序中實現可摺疊表格視圖。爲此,我在節標題中設置了一個手勢識別器,該手勢識別器將觸發NSNotification到父控制器,然後將刷新顯示展開視圖的視圖。發送NSNotification時無法識別選擇器

一切正常,直到父控制器接收它的消息,這將導致出現以下錯誤:

'+[MasterViewController receiveTestNotification:]: unrecognized selector sent to class 0xa92a8' 

我已經在這個網站環顧四周,發現關於此錯誤的幾個職位,但據我所知,我沒有犯這些錯誤。

我的登記發生在控制器的初始化,看起來像這樣:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"RefreshNavigation" object:nil]; 

接收器的方法我想叫有這樣的簽名:

- (void) receiveTestNotification:(NSNotification *) notification 

我發這個通知,像這樣,這在UIView的一個自定義子類中,我用作區段標題:

[[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshNavigation" object:self]; 

我發現的例子指向了這個確切的配置。我確信控制器不會被釋放,因爲它在整個應用程序中很快就會被使用。

關於我在做什麼錯的任何想法?

回答

10

您的錯誤消息表明通知正在發送到您的MasterViewController類,而不是MasterViewController實例。您遇到錯誤,因爲receiveTestNotification:是實例方法,而不是類方法。

我認爲問題在於您正在註冊initialize方法中的通知,這是一種類方法,因此該環境中的self指的是類本身,而不是實例。

Here is a very similar previous question解決方法是在init方法中註冊通知,這是一種實例方法。

+1

光榮!就是這樣!我將訂閱調用移動到viewdidload方法,現在它可以工作。謝謝。 –

+0

「我相信問題在於你正在註冊initialize方法中的通知,這是一個類方法,所以在這個上下文中self是指類本身,而不是實例。」 - 這是非常正確的。 –

相關問題