2015-12-02 34 views
0

我想將NSString從一個類傳遞給另一個類。比方說,我有一個的ViewController和ViewController B.我想從一個傳遞的NSString B.NSNotification不是調用@selector方法

在視圖控制器A,我有以下代碼:

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationMessageEvent" object:userType]; 

//這裏用戶類型爲字符串,我得到使用委託和我需要這個用戶類型傳遞到的ViewController乙

在視圖控制器B,I已經以下代碼: 在viewDidLoad中,我已經以下代碼:

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

//此NSNotificationCenter方法被稱爲

我註冊了以下選擇器方法。

-(void) notificationAction:(NSNotification *) notification 
{ 
    if ([notification.object isKindOfClass:[NSString class]]) 
    { 
     NSString *message = [notification object]; 
     // do stuff here with your message data 
     NSLog(@"%@ is message",message); 
    } 
    else 
    { 
     NSLog(@"Error, object not recognised."); 
    } 
} 

//上述選擇器方法永遠不會被調用。

我已閱讀其他類似的計算器的答案,但我一直沒能找到任何解決方案。

+0

爲了上述通知的選擇實際上被添加,視圖控制器B的viewDidLoad中必須已經調用(又名視圖必須顯示) –

+0

感謝您澄清@Hayden Holligan。實際上我在B之前加載A. – Rosh

+1

雖然您的代碼有效,但請不要以這種方式使用通知對象。這種情況下的對象是通知實例的發件人。使用userInfo在對象之間傳遞一些信息。 –

回答

6

您的代碼和語法顯然是正確的。我猜測這是一個對象生命週期的問題。我會假設下面的任一爲真:在通知發佈

  • 視圖控制器A被張貼

    • 視圖控制器B不實際存在的物體在ViewController B有機會註冊之前發出通知。

    您可以驗證其中之一的一種方法是添加兩個斷點,一個是發佈通知的地方,另一個是通知偵聽器註冊的地方。在發佈通知之前應該點擊偵聽器註冊的斷點。如果發生這種情況,那麼確認ViewController B實際上是一個當通知被髮布時存在的對象(就像它沒有從導航棧中彈出一樣)。

+0

謝謝@Andy Obusek,我沒有適當的NSNotification概念,我的ViewController A在ViewController B之前加載,因此ViewController B無法註冊NSNotification,但它對ViewController B之前加載ViewController A是強制性的,所以我認爲現在NSNotification已經脫離了上下文,因爲我無法在A之前加載B.我可能會使用委託作爲解決方法。謝謝 – Rosh

+0

聽起來不錯,不要忘記接受和贊成。 –

-1

這是你在找什麼 NSNotification not being sent when postNotificationName: called 必須的addObserver postNotificationName

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

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationMessageEvent" object:nil]; 
相關問題