2012-03-13 88 views
8

我想打電話給使用NSNotificationCenter無濟於事從AppDelegate中一個的UIView內的方法..postNotificationName沒有要求觀察者方法

AppDelegate.m

[[NSNotificationCenter defaultCenter] postNotificationName:@"ProcessDidComplete" object:items]; 

然後通過MainStoryboard,其主要觀點是加載哪個控制器類是MainViewController

在MainViewController.h viewDidLoad中我有

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

,然後方法

- (void) ProcessDidComplete:(NSNotification *)pNotification 

但它永遠不會被調用。

感謝您的幫助!

+1

那麼,你發佈了一個通知,並_after_你註冊一個觀察員呢? – JiaYow 2012-03-13 10:54:07

回答

15

只是改變的方式..

首先添加觀察者

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

然後張貼通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"ProcessDidComplete" object:items]; 

在viewWillDisappear最後刪除

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ProcessDidComplete" object:nil]; 
+1

哇!那很快。感謝您的回覆。你指出我正確的方向。 postNotificationName在觀察者被創建之前被調用,所以現在的問題是......考慮到我使用storyboard加載視圖,我怎麼能在發佈notificacion之前將它添加到addObserver中,因爲postNotificationName在AppDelegate的didFinishLaunchingWithOptions和observer中被調用是從MainView的viewDidLoad中添加的。在此先感謝 – spacebiker 2012-03-13 11:02:56

+0

我還沒有實現storyboard..Better你嘗試adddserver在appdidfinishlaunching方法。 – Rams 2012-03-13 11:16:38

4

您的代碼看起來不錯,這讓我想知道你的應用程序委託在哪裏發佈通知?

如果您在視圖控制器中添加觀察者之前發佈通知,那麼通知將永遠不會被接收到。你不能直接發送消息到主視圖控制器,即作爲一個屬性,而不是使用通知?

+0

喜隊友,感謝您的答覆。通知發佈在didFinishLaunchingWithOptions中,觀察者在MainView的viewDidLoad中創建,因爲我使用的是故事板,MainView加載太遲。你有什麼建議嗎? – spacebiker 2012-03-13 11:07:30

0

只是想在這裏指出,iOS的通知名稱區分大小寫

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

將不迴應:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ScheduleUpdated" object:items]; 

(因爲我花了最後20分鐘搞清楚。 ..)