Вы создаете новый экземпляр FirstViewController
...
FirstViewController *controller = [[FirstViewController alloc]init];
... отличающийся от исходного экземпляра, который (я предполагаю) выдвинул SecondViewController
и к которому вывозврат через popViewControllerAnimated:
.
По сути, вам нужно передать данные обратно в контроллер, который выдвинул SecondViewController
, в данном случае, FirstViewController
.
Возможно, самый простой способ добиться этого - то, что @Ladislav предложил в своем комментарии:
NSArray *viewControllers = [self.navigationController viewControllers];
FirstViewController *firstVC = [viewControllers objectAtIndex:[viewControllers count] - 2];
Однако имейте в виду, что это вводит прямую зависимость между SecondViewController
и FirstViewController
.Или, другими словами, SecondViewController
теперь тесно связан с FirstViewController
.
В двух словах, когда речь идет о передаче данных обратно в иерархию, рекомендуется использовать свободныйсвязь , чтобы избежать прямой зависимости между вашими контроллерами вида (жесткая связь).Преимущества этого включают повторное использование кода и тестируемость.Для достижения слабой связи необходимо определить общий интерфейс для наблюдателей (например, делегирование, уведомления и т. Д.).
Стоит также упомянуть важность размещения информации о состоянии в объектах модели.,Старайтесь не размещать данные внутри контроллеров, если только они не являются строго презентационными данными.
Подробнее по этой теме: Какой лучший способ связи между контроллерами представления?