iPhone - передать массив между двумя несмежными контроллерами

StackOverflow https://stackoverflow.com/questions/1032719

  •  06-07-2019
  •  | 
  •  

Вопрос

Я создаю приложение, которое начинается с загрузки «загрузочного» контроллера представления, который извлекает массив данных через вызов API. Как только данные возвращены, приложение затем скрывает представление этого контроллера представления и загружает контроллер панели вкладок, который содержит два контроллера навигации.

Первое представление, помещенное на первый контроллер навигации, является представлением таблицы. Именно в этом табличном представлении мне нужно отобразить данные, полученные из вызова API, в начальном контроллере представления «загрузка».

Может кто-нибудь объяснить мне, как я передал бы эти данные между контроллерами загрузки и табличного представления? Учитывая, что они не знают друг о друге.

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

Это было полезно?

Решение

Ваши данные подчинены приложению, поэтому делегат приложения может сохранить указатель на данные, а затем два представления могут получить к нему доступ с помощью [[UIApplication sharedApplication] делегат] .

Другой вариант - отправить сообщение с данными делегату приложения после завершения загрузки. Я предполагаю, что вы уже делаете что-то подобное, так как вы говорите, что приложение скрывает представление контроллера представления, а не скрывает сам контроллер представления. Каким-то образом он должен знать, что загрузка завершена. Итак, в контроллере загрузки:

- (void) downloadFinished {
    [listener downloadFinished:data];
}

И в вашем делегате приложения ( слушатель из предыдущего фрагмента):

- (void) downloadFinished:(NSData *)data {
    CustomViewController *c = [[[CustomViewController alloc] initWithData:data] autorelease];
    [downloadView removeFromSuperview];
    [window addSubview:c.view];
}

Где ваш собственный контроллер представления имеет дело с загрузкой NIB и хранением данных для доступа к таблице.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top