У меня есть это приложение (стиль контактов), в котором вы можете добавлять экземпляры в табличное представление, и оно отлично работает для добавления объектов в список.Список представляет их в подробном виде отлично.Я могу вызывать представление «Добавить элемент» (UIViewController с табличным представлением в нем) столько раз, сколько мне нужно, в моем MasterViewController (UITableViewController, rootControler контроллера Nav).
Когда я увидел, что это работает,и хотел расширить функциональность моего приложения, чтобы позволить пользователю редактировать свои текущие объекты в списке, я добавил кнопку «Редактировать» в Nav Controller элемента detailView, этот UiBarButton вызывает метод, который пытается загрузить этот же «Добавить элемент»"представление, которое используется для добавления элемента в представление таблицы.Вот где начинают происходить странные вещи.
Если я запускаю приложение и нажимаю на существующий объект в представлении списка, я успешно перехожу в подробный вид.Если я затем коснусь кнопки «Редактировать», представление «Добавить элемент» прекрасно загружается с данными объекта, который он в данный момент редактирует.Затем я могу отменить / сохранить / отклонить это представление «Добавить элемент» много раз, пока я продолжаю вызывать его из подробного представления.Если я затем вернусь к представлению списка и попытаюсь добавить элемент, приложение вылетает.
Если я запускаю приложение и, прежде чем что-либо еще, я загружаю «Добавить элемент» из основного представления списка,представление будет отлично загружаться, и я могу идеально добавлять объекты столько раз, сколько захочу.Если затем перейти к подробному виду и попытаться редактировать объект, приложение вылетает.
Простое задание (если вам лень читать выше) : приложение вылетает всякий раз, когда япопробуйте загрузить представление «Добавить элемент» с контроллера, отличного от того, который загрузил его в первый раз.
Вот журнал сбоев:
*** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:],
/SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:6061
2012-03-26 21:22:49.087 Vex Try 5[2749:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
*** First throw call stack: ...
Видимо, второй разпытается загрузить, cellForRowAtIndexPath
возвращает странную ячейку.
Вот как я называю это в виде списка:
- (void)insertNewObject:(id)sender
{
if (!_objects) {
_objects = [[NSMutableArray alloc] init];
}
BIDVexTeam *newTeam = [[BIDVexTeam alloc] init];
[_objects insertObject:newTeam atIndex:0];
if (!self.addNew) {
self.addNew = [[BIDEditViewController alloc] init];
}
if (!self.editNavController) {
self.editNavController = [[UINavigationController alloc] initWithRootViewController:self.addNew];
}
addNew.title = @"Add New";
addNew.team = newTeam;
addNew.parent = self;
[self presentModalViewController:self.editNavController animated:YES];
}
А вот как я вызываю это из подробного вида:
- (IBAction)editTeam:(id)sender {
if (!self.editView) {
self.editView = [[BIDEditViewController alloc] initWithNibName:@"BIDEditViewController" bundle:[NSBundle mainBundle]];
}
if (!self.editNavController) {
self.editNavController = [[UINavigationController alloc] initWithRootViewController:self.editView];
}
editView.title = [NSString stringWithFormat:@"Edit %@", detailTeam.number];
self.editView.team = self.detailTeam;
[self presentModalViewController:editNavController animated:YES];
}
Редактировать : Вот мой метод cellForRowAtIndexPath ... Не вставляйте его сюда, потому что он довольно длинный, а также снимок экрана с тем, чего я пытаюсь достичь:
http://www.clubpenguinaccess.com/extra/cellforrow-method.rtf
снимок экрана http://www.clubpenguinaccess.com/extra/app-screenshot.png