Я думаю, что делегирование является наиболее подходящим методом для этой задачи.Вы должны создать новый протокол с именем SubjectViewControllerDelegate
и добавить несколько методов, таких как:
- (void)subjectViewController:(SubjectViewController*)controller didEditSubject:(Subject*)subject;
- (void)subjectViewController:(SubjectViewController*)controller didDeleteSubject:(Subject*)subject;
SubjectViewController имеет свойство делегата, чтобы сохранить слабую ссылку на его делегат.Он вызывает методы делегата всякий раз, когда данные удаляются или редактируются.
CategoryViewController реализует этот протокол и устанавливает себя в качестве делегата экземпляра SubjectViewController перед передачей его в контроллер навигации.В этих методах вы можете либо обновить всю таблицу, либо просто обновить измененные строки.
ОБНОВЛЕНИЕ:
Предполагая, что в CategoryViewController имеется только один раздел иоставьте объекты в NSMutableArray
, вы можете использовать коды, аналогичные приведенным ниже, для обновления соответствующей части табличного представления.
- (void)subjectViewController:(SubjectViewController*)controller didEditSubject:(Subject*)subject{
NSInteger row;
NSIndexPath* indexPath;
NSArray* indexPaths;
row = [self.subjects indexOfObject:subject];
indexPath = [NSIndexPath indexPathForRow:row inSection:0];
indexPaths = [NSArray arrayWithObject:indexPath];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
}
- (void)subjectViewController:(SubjectViewController*)controller didDeleteSubject:(Subject*)subject{
NSInteger row;
NSIndexPath* indexPath;
NSArray* indexPaths;
row = [self.subjects indexOfObject:subject];
indexPath = [NSIndexPath indexPathForRow:row inSection:0];
indexPaths = [NSArray arrayWithObject:indexPath];
[self.subjects removeObjectAtIndex:row];
[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
}