У меня есть приложение для iPad iOS, где в левой части экрана отображается табличное представление, а справа отображается форма ввода данных. Правая форма ввода данных состоит из другого представления таблицы с UITextFields внутри ячеек.UITableView сбой с reloadRowsAtIndexPaths
Когда определенное текстовое поле изменено, мне нужно изменить соответствующую строку в левой таблице. Я управляю этим, используя уведомления. В большинстве случаев все работает нормально, но иногда приложение падает, когда я пытаюсь обновить конкретную строку в левой таблице.
С левой стороны стола просматривается другой контроллер вида на правый стол.
В правой таблице текстовое поле имеет следующий метод в пределах его зрения контроллера:
-(void)textFieldDidChange:(id)sender
{
switch (((UIView*)sender).tag) {
case TAG_QE_PAGECAPTIONTEXTFIELD:
NSLog(@" = = = = = Caption did change %@",((UITextField*)sender).text);
[getModelForm() updateCurrentPageCaption:((UITextField*)sender).text forLanguage:@"English"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"pageCaptionWasChanged" object: @"PageEdit"];
break;
default:
break;
}
}
ViewController за столом слева устанавливает слушателя для уведомления с помощью следующего кода:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(eventPageCaptionWasChanged:)
name: @"pageCaptionWasChanged"
object: nil];
контроллер вид для таблицы слева, то есть следующий метод:
-(void)eventPageCaptionWasChanged:(id)alteredText
{
UITableView* tableView = (UITableView*)[ self.view viewWithTag:TAG_QE_PAGELIST_TABLEVIEW ];
int row = (int)getModelForm().currentPageNo;
NSLog(@"HPSQuestionnaireEditorController got eventPageCaptionWasChanged with %@ for row %i",alteredText,row);
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:row inSection:0];
NSArray* array = [NSArray arrayWithObject:indexPath];
int modelPageCount = getModelForm().pages.count;
NSLog(@"eventPageCaptionWasChanged modelPageCount=%i",modelPageCount);
[tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationFade];
}
Приложение прерывается с ошибкой на линии [tableView reloadRowsAtIndexPaths
. Исключение: отказ * Assertion в - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:1037
Может кто-нибудь помочь?
Большое спасибо.
пытаются поставить код в '- (пустоте) eventPageCaptionWasChanged: метод (идентификатор) alteredText' в примерочных поймать блока и распечатать исключения. Я думаю об исключении из заграницы, но его печать даст нам дополнительные подсказки. – George
Отладчик сообщает об исключении как: *** Завершение приложения из-за неотображенного исключения «NSInternalInconsistencyException», причина: «попытаться удалить строку 2 из раздела 0, которая содержит только две строки перед обновлением». – whatdoesitallmean