Информация из переданного viewController в rootViewController

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

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

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

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


person John Kofod    schedule 22.11.2010    source источник
comment
Привет, Джон, вы используете CoreData для управления своими данными? Пожалуйста, опубликуйте еще несколько подробностей о вашей реализации, чтобы мы могли помочь.   -  person Rog    schedule 22.11.2010


Ответы (4)


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

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

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

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

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

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

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

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

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

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

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

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

person drekka    schedule 22.11.2010

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

person MathieuF    schedule 22.11.2010

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

Итак, просто вызовите [self.navigationController popViewControllerAnimated:YES]; в контроллере представления.

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

person August Lilleaas    schedule 22.11.2010

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

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

[self.navigationController popViewControllerAnimated: ДА];

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

person Ishu    schedule 22.11.2010