Могу ли я использовать метод селектора NSNotificationCenter в контроллерах с несколькими представлениями? [дубликат]

у меня есть этоViewControllerA это подталкиваетViewControllerB в стек навигации, который подталкиваетViewControllerC в стек.

ИзViewControllerB , Я могу заскочитьViewControllerA . И изViewControllerC , Я могу заскочитьViewControllerA .

Мне нужно пройтиNSNumber кViewControllerA из любогоB а такжеC (в зависимости от того, какой контроллер я использую, чтобы открытьA ).

Я собираюсь включить следующее:

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(getUpdate:)        
                                                 name:@"getUpdateForCell" 
                                               object:nil];
}

и реализовать:

- (void)getUpdate:(NSNotification *)notification {
    NSDictionary *data = [notification userInfo];
    // pop
}

Могу ли я использовать / реализоватьgetUpdate: в обоихViewControllerB а такжеViewControllerC ?

# uiviewcontroller nsnotificationcenter nsnotification
Источник
  • 0
    Да, вы можете это использовать.
  • 0
    Пожалуйста, не публикуйте свои вопросы повторно. При необходимости обновите исходный вопрос, чтобы сделать его более ясным.
  • 0
    Приношу свои извинения, я не смог получить четкого ответа от респондента из моего предыдущего сообщения. Стоит ли удалять предыдущий пост?
Codelisting
за 0 против
Лучший ответ

Для одного подключения типа отViewControllerC кViewControllerB вы можете использовать@protocol (шаблон проектирования делегирования). Но для задач, где нужно что-то обновить не из одного места, нужно использоватьNSNotificationCenter

Итак, ваша реализация для текущей задачи верна.

  • 0
    Спасибо, это здорово знать. Я собирался реализовать шаблон проектирования делегата, но понял, что экземпляр моего ViewControllerB который A будет использовать для получения данных, может больше не существовать в какой-то момент. У меня есть кнопки вперед / назад в ViewControllerB которые удаляют B из стека и создают еще один экземпляр B для размещения в стеке (это для игры со 100 уровнями). Таким образом, исходный экземпляр потеряет связь с ViewControllerA . По крайней мере, я бы подумал, правда?
  • 0
    Вам необходимо иметь свойство делегата в ViewControllerB. Каждый раз, когда вы создаете объект ViewControllerB из A, вам нужно установить для свойства делегата значение self (если оно из A)
  • 0
    Допустим, у меня есть это: ViewControllerB *object = [[ViewControllerB alloc] init]; object.delegate=self; self является объектом из ViewControllerA , а делегат из B Если я уничтожу этот B а затем создам новый, как объект self A изменит соединение с делегатом?
  • 0
    нет, это не реформа. каждый раз, когда вы создаете ViewControllerB , вам нужно установить делегат
  • 0
    Это то, о чем я думал. Допустим, я имею дело с новым экземпляром ViewControllerB , как мне ViewControllerA , учитывая, что этот пользователь все еще будет взаимодействовать с представлениями нового ViewControllerB ?
Codelisting
Популярные категории
На заметку программисту