iOS: уведомите другие контроллеры представления с вкладками об изменении своего набора данных - PullRequest
3 голосов
/ 25 августа 2011

У меня есть контроллер панели вкладок и внутри него два контроллера: контроллер просмотра карты и просмотр таблицы + контроллер NSFetcheddata. Оба отображают информацию о конкретном дне из основных данных и имеют кнопку для модального отображения селектора дня.

Я добился изменения набора данных моих контроллеров, когда их контроллер модального представления исчезает из-за делегирования, но я хотел бы, чтобы два контроллера обновляли свои данные, а не только тот, который отображал модальный контроллер.

Я думал о создании протокола на обоих контроллерах и установке друг друга в качестве его делегата, но я хотел бы знать, правильно ли я здесь работаю.

Приветствия

Thierry

Ответы [ 3 ]

7 голосов
/ 25 августа 2011

Есть множество способов сделать это. Одним из способов является использование NSNotificationCenter. Определите свое собственное имя для уведомлений:

static NSString *const CSDataUpdatedNotification = @"CSDataUpdatedNotification";

Подпишитесь на это уведомление на обоих ваших контроллерах:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataUpdated:) name:CSDataUpdatedNotification object:nil];

И внедрить dataUpdated: для обновления ваших данных:

- (void)dataUpdated:(NSNotification *)notification
{
    // Handle updates here
}

В контроллере, вызывающем изменение, отправьте уведомление:

- (void)updateData
{
    // Data updating routine
    // ...

    [[NSNotificationCenter defaultCenter] postNotificationName:CSDataUpdatedNotification object:self];
}
1 голос
/ 25 августа 2011

Вы можете установить оба в качестве делегата (то есть двух делегатов) и повторно использовать контроллер модального представления для обоих.

В качестве альтернативы используйте NSNotificationCenter, , но я думаю, что метод делегата лучше, потому что отношения ближе к этому . это путь, если вы хотите отправить сообщение более чем одному объекту.

0 голосов
/ 15 июня 2012

Thierry, Будучи новичком в iOS, я бы не назвал это «ответом», но использование глобальной системы уведомлений не подходит для такой проблемы.

В поисках ответа на похожую проблему я наткнулся на ссылки на NSFetchedResultsController, который вычислит для вас результаты, которые легко можно будет использовать в качестве модели UITableView - только для чтения знаний. Часть, относящаяся к вашей проблеме, кажется, является ее делегатом, NSFetchedResultsControllerDelegate, который определяет несколько методов, которые позволят сообщить об изменениях в результате любому числу заинтересованных сторон.

Но, как я уже сказал, я просто наткнулся на это и только сейчас пытаюсь использовать это.

С уважением, nobi

...