0

アイテムのリストを表示するシンプルな UITableView を開発しました。この UITableView の上に、ユーザーが選択した行に移動する UIImageView の形式で選択バーを作成しました。この選択バーの動きも制御する 2 つのボタン (上に 1 つ、下に 1 つ) を作成しました。ユーザーが上ボタンをクリックすると、選択バーは正確に 1 行上に移動し、ユーザーが下ボタンをクリックすると、選択バーは正確に 1 行下に移動します。私の問題は、テーブルの一番上に到達したときに、ユーザーが上ボタンをクリックした場合に選択バーをテーブルの一番下に移動させ、選択バーを一番上に移動させたいことです。ユーザーが下向きのボタンをクリックした場合のテーブル。どちらのボタンも同じメソッドを呼び出します (タグの値に基づいて 2 つのボタンを区別しています)。でも、

2013-06-06 11:34:03.124 SimpleTable[4982:c07] *** Assertion failure in -[UITableViewRowData rectForRow:inSection:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableViewRowData.m:1630
2013-06-06 11:34:03.207 SimpleTable[4982:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath 0x9489850> 2 indexes [0, 10])'

なぜこれが起こっているのかわかりません。これは、上下のボタンによって呼び出される関連コードです。

- (IBAction)buttonClicked:(id)sender {

    if([sender tag] == 1){

        if (_index.row == 0) {

            _index = [NSIndexPath indexPathForRow:[_tableData count] inSection:_index.section];

        }

        else
            _index = [NSIndexPath indexPathForRow:_index.row - 1 inSection:_index.section];

         [UIView animateWithDuration:.3 animations:^{
            CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];

            CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
            _imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
        }];

    }

    else if([sender tag] == 2){

         if (_index.row == [_tableData count]) {

            _index = [NSIndexPath indexPathForRow:0 inSection:_index.section];

        }

         else
             _index = [NSIndexPath indexPathForRow:_index.row + 1 inSection:_index.section];

        [UIView animateWithDuration:.3 animations:^{
            CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];

            CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
            _imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
        }];

    }

}

誰かが私が間違っていることを見ることができますか?

回答者全員に事前に感謝します。

4

1 に答える 1