2013-12-08 1 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]; 

Надеюсь, это может помочь.

EDIT:

Когда UIViewController выгружаются или когда приложение кончить, вы должны позвонить:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

для остановки наблюдения. Вот и все.

Благодаря горячим ликам для коррекции.

+0

Конечно, этого достаточно, чтобы быть опасным. Наблюдатели должны быть удалены, когда они удалены или иным образом не используются. –

+0

Да, извините. Вы должны удалить его с помощью removeObserver при выгрузке UIViewController или при завершении работы приложения – 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

Как уже упоминалось Горячие лижет, вы действительно не хотите, чтобы перейти в это, не зная, что происходит. Надеемся, что эти ссылки помогут вам двигаться в правильном направлении.

 Смежные вопросы

  • Нет связанных вопросов^_^