0

ビューの左側にテーブルビューが表示され、右側にデータ入力フォームが表示される iPad iOS アプリがあります。右側のデータ入力フォームは、セル内に UITextFields を持つ別のテーブルビューで構成されています。

特定のテキスト フィールドが変更された場合、左側のテーブル内の対応する行を変更する必要があります。通知を使用してこれを管理しています。ほとんどの場合、すべて正常に動作しますが、左側のテーブル内の特定の行を更新しようとすると、アプリがクラッシュすることがあります。

左側のテーブルビューは、右側のテーブルとは別のビュー コントローラーによって管理されています。

右側のテーブルのテキストフィールドには、View Controller 内に次のメソッドがあります。

-(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 から始まるように見えますが、テーブル インデックスは 0 から始まるため、番号 2 の行を探すと、テーブルは実際には 3 番目の項目、つまり 0,1,2 を検索しているため、out を取得しています。境界の例外。

これを修正する最も簡単な方法は、この行を変更することです。

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

これに

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