Intereting Posts
Изменение распознавания шрифтов для tesseract в iOS ActivityIndicator не останавливается после вычислений iOS – документы приложения iPhone «Нет такой директории»? Ошибка при запуске приложения: «Элемент недоступен» Как установить текст ранее созданной NSMutableString? Как я могу рассчитать направление MKRouteStep в MapKit Программно прокручивать UIPageViewController только немного Определить, где было выполнено изображение (местоположение) в объективе c Как добавить SSZipArchive (или любую другую библиотеку zipping) в быстрый проект ios 7.1 вручную? В качестве SSZipArchive нет модуля iOS: программный контроль громкости оповещения и звуковой темы оповещения Как переопределить наложение css в jQuery-BlockUI presentModalViewController не отображает панель инструментов? Игра работает отлично на iOS 4.3, но сбой на iOS 5 на glDrawArrays Настройка представления захвата изображения в классе AVCaptureStillImageOutput Эффективное хранение больших объемов данных в iOS

Делегирование из вложенного навигационного стека

У меня есть стандартный контроллер представлений, выступающий в роли делегата для контроллера модального представления над ним. Этот контроллер модального представления содержится в контроллере навигации.

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

Должен ли я передать сообщение обратно в стек навигационной системы на контроллер корневого представления контроллера модальной навигации первым и просто использовать методы делегата этого контроллера?

ИЛИ

Должен ли я просто передать свойство delegate вместе с вложенным контроллером представления, а затем вызвать делегата напрямую с помощью отдельного протокола. Это работает, но я должен использовать

@property (nonatomic, weak) id delegate; 

вместо

 @property (nonatomic, weak) id <NestedViewDelegate> delegate; 

в противном случае я получаю ошибку несовместимого типа при передаче делегата из контроллера просмотра в стеке:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

{

 NestedViewController *nest = [[NestedViewController alloc] init]; // @property id <RootViewControllerDelegate> delegate [nest setDelegate:[self delegate]]; [[self navigationController] pushViewController:nest animated:YES]; 

}

Какова наилучшая практика для такого рода сценариев?

благодаря

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

Вы регистрируетесь для уведомления в своем корне и публикуете у вас ребенка.

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsnotificationcenter_Class/Reference/Reference.html

ПРИМЕР

В объекте Child вы делаете что-то вроде этого:

 [[NSNotificationCenter defaultCenter] postNotificationName:kMyNotificationName object:self userInfo:@{ @"key" : @"value" }]]; 

kMyNotificationName определяется в общем месте, например pch или Constants.h.

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

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationName:) name:kMyNotificationName object:nil]; 

Не забудьте удалить наблюдателей в ваш dealloc или когда вы поп ребенка.

 [[NSNotificationCenter defaultCenter] removeObserver:self kMyNotificationName object:nil]; 

Теперь вы можете обработать уведомление примерно так:

 - (void)myNotificationName:(NSNotification *)note { NSDictionary *userInfo = [note userInfo]; // Do stuff using the information passed in. }