2013-12-08 91 views
0

發送NSNotification我想從這個方法(在單擊UIButton時)在我AppDelegate.m發送NSNotification從AppDelegate中

- (void)alertView:(UIAlertView *)alertView 
     clickedButtonAtIndex:(NSInteger)buttonIndex{ 

if (buttonIndex == 0){ 
    //cancel clicked ...do your action 
    // HERE 
} 
} 

..和我UIViewControllers的一個接收它。我怎樣才能做到這一點?

編輯與更多信息:我正在做一個鬧鐘應用程序,當用戶按下UIButton,我想停止報警。我認爲NSNotifications是從我的AppDelegate.m文件獲取信息到ViewController.m文件的唯一方法?

+1

你真正的問題是什麼? – Larme

+1

您可能想重新考慮這一點。通知應該通常在視圖控制器的viewWillAppear中註冊:並且在其viewWillDisappear方法中未註冊,所以當您將其發佈到AppDelegate中時,通知可能無法訪問。你想用這個通知做什麼? – Chris

+0

您不能發送NSNotification ...但您可以播放它 – doNotCheckMyBlog

回答

4

您應該註冊接收方對象以接受來自通知中心的一些消息。

假設你有控制你的報警的Obj A,並且值「stopAlarm」是可以停止報警的消息。你應該爲「stopAlarm」消息創建一個觀察者。

你可以這樣做,有:

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

現在,你應該創建一個管理該消息的方法控制:

- (void)controller:(NSNotification *) notification { 

    if ([[notification name] isEqualToString:@"stopAlarm"]){ 

     //Perform stop alarm with A object 
    } 
    } 

最後,你可以發送郵件「stopAlarm」當你想在代碼與:

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"stopAlarm" 
    object:nil]; 

我希望這可能有所幫助。

編輯:

當UIViewController中被卸載或應用程序時終止,你應該叫:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

爲停止觀察。 就是這樣。

感謝熱舔糾正。

+0

當然,這足夠危險。觀察員在被刪除或以其他方式失效後需要刪除。 –

+0

是的,我很抱歉。當UIViewController被卸載或應用程序終止時,您應該使用removeObserver將其刪除 – dpizzuto

+0

這肯定會「起作用」,但這樣做是非常危險的,因爲他們有一輩子......至少他們應該這樣做。 – Chris

0

如果只有一個警報,您可能想要創建一個類(甚至可能是單例)來管理定時器。這樣,您可以從應用程序中的任何地方而不是在視圖控制器中進行管理。看一看:

http://dadabeatnik.wordpress.com/2013/07/28/objective-c-singletons-an-alternative-pattern/

和:

https://developer.apple.com/library/mac/documentation/cocoa/conceptual/Notifications/Articles/NotificationCenters.html

爲熱舔提到的,你真的不想跳進這個不知道是怎麼回事。希望這些鏈接能幫助你朝着正確的方向前進。