我有一个iPad iOS应用程序,其中一个tableview显示在视图的左侧,一个数据输入表单显示在右侧。右侧数据输入表单由单元格内的UITextFields的另一个tableview组成。
当更改特定文本字段时,我需要更改左侧表格中的相应行。我正在使用通知进行管理。大部分时间它都可以正常工作,但有时当我尝试更新左侧表格中的特定行时应用程序崩溃。
左侧tableview由右侧表格的不同视图控制器管理。
右侧表文本字段在其视图控制器中具有以下方法:
-(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
行间歇性崩溃。例外是:
* 断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-1914.84 / UITableView.m:1037
有人可以帮忙吗?
非常感谢。
答案 0 :(得分:1)
似乎页码从1开始,但表索引从零开始,所以当你查找编号为2的行时,表实际上是在搜索第3项,即0,1,2,因此是越界越界。
最简单的修复方法就是更改此行。
int row = (int)getModelForm().currentPageNo;
到这个
int row = (int)getModelForm().currentPageNo -1;