У меня такая же ситуация - две таблицы. Первый телевизор отображает список записей базы данных, а при нажатии на него он переходит ко второму табличному представлению, в котором отображаются подробности записи. Я делаю это, помещая детали TableViewController в стек контроллеров навигации. Пока так далеко и довольно просто.
Проблема, с которой я столкнулся, заключалась в том, что после обновления записи в табличном представлении сведений (контроллере) я хотел сообщить контроллеру табличного представления списка, чтобы он мог обновить список записей.
Первым делом я добавил свойство в контроллер представления таблицы сведений, чтобы при выборе строки в списке записей контроллер списка мог передавать управляемый объект основных данных в контроллер сведений.
В то же время я также добавил контроллер списка в качестве наблюдателя событий изменения основных данных, таких как:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];
Таким образом, если представление таблицы сведений и контроллер обновляют запись, у контроллера списка вызывается метод dataSaved:
, передающий объект NSNotification.
В методе dataSaved:
я проверяю объект, и если редактируемый базовый объект данных находится в обновленном списке, тогда я устанавливаю флаг, сигнализирующий о необходимости обновления. Однако, если во вставленном списке есть запись, это означает, что новая запись была создана и вставлена в базу данных, поэтому установлен флаг для запуска полной перезагрузки представления таблицы списка.
Когда пользователь возвращается к контроллеру представления списка, запускается метод viewDidAppear:
. В этом методе я проверяю флаги и вызываю
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
для перезагрузки определенной записи, если запись была обновлена, или указание табличному представлению выполнить полную перезагрузку, если имеется вставка новой записи.
Наконец, я затем удаляю контроллер списка в качестве наблюдателя уведомлений о базовых данных, потому что он больше не заинтересован.
Я не знаю, является ли это рекомендуемым способом сделать это, но пока он работает для меня.