Информация от отправленного viewController к rootViewController - PullRequest
0 голосов
/ 22 ноября 2010

Вроде простой вопрос.У меня есть таблица в навигационном контроллере.Когда я касаюсь ячейки, она выдвигает контроллер представления с информацией из ячейки, поэтому я могу редактировать ее в новом представлении.Теперь все работает правильно (мы можем назвать это информационный путь: «rootviewcontroller -> pressed viewcontroller»).Но когда я нажимаю «Сохранить» в новом представлении, я хочу, чтобы отредактированные значения возвращались обратно в rootviewcontroller, прежде чем я вызову popviewcontroller (informationpath: «pressed viewcontroller -> rootviewcontroller»), чтобы отредактированные значения могли отображаться в табличном виде.

Какой правильный подход к этому?

РЕДАКТИРОВАТЬ:

pushViewController и popViewController работает.Я только попросил лучший способ вернуть отредактированную информацию обратно в rootViewController для отображения в виде таблицы, когда была вызвана кнопка Save (popViewController).Я предполагаю, что мне просто нужно отредактировать pList с новой информацией непосредственно из push-viewController.Хотя я бы предпочел отправлять новую информацию в rootViewController, чтобы он обрабатывал доступ к pList-файлу.

Ответы [ 4 ]

0 голосов
/ 22 ноября 2010

У меня такая же ситуация - две таблицы. Первый телевизор отображает список записей базы данных, а при нажатии на него он переходит ко второму табличному представлению, в котором отображаются подробности записи. Я делаю это, помещая детали TableViewController в стек контроллеров навигации. Пока так далеко и довольно просто.

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

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

В то же время я также добавил контроллер списка в качестве наблюдателя событий изменения основных данных, таких как:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

Таким образом, если представление таблицы сведений и контроллер обновляют запись, у контроллера списка вызывается метод dataSaved:, передающий объект NSNotification.

В методе dataSaved: я проверяю объект, и если редактируемый базовый объект данных находится в обновленном списке, тогда я устанавливаю флаг, сигнализирующий о необходимости обновления. Однако, если во вставленном списке есть запись, это означает, что новая запись была создана и вставлена ​​в базу данных, поэтому установлен флаг для запуска полной перезагрузки представления таблицы списка.

Когда пользователь возвращается к контроллеру представления списка, запускается метод viewDidAppear:. В этом методе я проверяю флаги и вызываю

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

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

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

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

0 голосов
/ 22 ноября 2010

Все контроллеры UIView имеют метод navigationController.Когда вы перемещаете контроллер вида в контроллер навигации, это свойство устанавливается так, чтобы оно указывало на контроллер навигации.

Итак, просто вызовите [self.navigationController popViewControllerAnimated:YES]; в контроллере представления.Не путайте представления и контроллеры представления.Когда вы нажимаете «Сохранить» в представлении, вы должны убедиться, что кнопка «Сохранить» вызывает метод на вашем контроллере представления, который, в свою очередь, обращается к контроллеру навигации.

0 голосов
/ 22 ноября 2010

При нажатии на строку Вы переходите в новый вид с соответствующей информацией.

Здесь вы выполняете некоторые операции, такие как редактирование данных. Поэтому сначала сохраните изменения, нажав на кнопку «Сохранить» (вызывая IBAction), и в этом методе IBAction проверит, были ли изменения успешно сохранены), затем вызовите

[self.navigationController popViewControllerAnimated: YES];

И убедитесь, что таблица обновляется автоматически обновленными данными (для этого измените массив данных, вызвав метод базы данных в методе viewWillAppear).

0 голосов
/ 22 ноября 2010

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

...