0

我有一个 iPad iOS 应用程序,其中一个表格视图显示在视图的左侧,一个数据输入表单显示在右侧。右侧的数据输入表单由另一个 tableview 组成,其中 UITextFields 在单元格内。

当更改特定文本字段时,我需要更改左侧表格中的相应行。我正在使用通知进行管理。大多数情况下一切正常,但有时当我尝试更新左侧表格中的特定行时应用程序崩溃。

左侧表格视图由与右侧表格不同的视图控制器管理。

右侧表格文本字段在其视图控制器中具有以下方法:

-(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;
    }
}

左侧表格的视图控制器使用以下代码为通知建立一个监听器:

[[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 中的断言失败

任何人都可以帮忙吗?

非常感谢。

4

1 回答 1

1

似乎页码从 1 开始,但表索引从零开始,因此当您查找编号为 2 的行时,该表实际上是在搜索第 3 项,即 0、1、2,因此正在输出边界异常。

修复它的最简单方法是更改​​此行。

int row = (int)getModelForm().currentPageNo;

对此

int row = (int)getModelForm().currentPageNo -1;
于 2012-07-04T20:38:30.470 回答