Да, уведомления - хороший способ сделать это. И когда Модель хочет обновить Контроллер [т.е. ViewController] - это хороший способ сделать уведомление. В моем случае я пытаюсь обнаружить устройства, использующие SSDP (используя AsyncUdpSocket), и я хотел обновить / уведомить мой контроллер представления, когда я обнаружил устройство. Поскольку это асинхронно, при получении данных я использовал уведомление. Вот простая вещь, которую я сделал:
В viewDidLoad (я попытался переопределить init, но у меня это не получилось) - я зарегистрировал свой ViewController для уведомления следующим образом:
*NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(foundController:)
name:@"DiscoveredController"
object:nil];
Вот селектор в моем ViewController:
// receive the notification
- (void)foundController:(NSNotification *)note
{
self.controllerFoundStatus.text = @"We found a controller";
}
В моей «модели» [не делегат приложения - я создал новый класс, который я использую для обнаружения устройств «serviceSSDP», все, что я сделал, это опубликовал уведомление следующим образом:
[[NSNotificationCenter defaultCenter] postNotificationName:@"DiscoveredController" object:nil];
Вот и все. Эта публикация уведомления происходит, когда я получаю правильный ответ на мое обнаружение SSDP [в частности в:
- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock
didReceiveData:(NSData *)data
withTag:(long)tag
fromHost:(NSString *)host
port:(UInt16)port
из AsyncUdpSocket.