0

最初は私のテーブルビューが空ですが、次に独自のセルを追加できます。これらのセルを削除すると、すべてが正常に機能します。ただし、最後のセルを削除すると、NSMutableArrayにオブジェクトが含まれなくなり、コンソールでこのエラーが発生します(また、コアデータを使用してセルを保存しています)。

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (123150308) beyond bounds (1)'

このコード行も入れてみましたが、それでも同じ結果が得られます。

//arr is my mutable array
        if ([arr count] == 0) {
        NSLog(@"No Cells");
    }

これは、テーブルビューからオブジェクトを削除する方法です。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [arr removeObjectAtIndex:0];
        [context deleteObject:[arr objectAtIndex:0]];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

この問題をどのように解決しますか?

4

2 に答える 2

3

Ok。

私があなたのコードで見つけた2つの問題があります。

1-インデックス0のオブジェクトを毎回削除するのはなぜですか?

2-[arr removeObjectAtIndex:0];同じインデックスの配列からではなく配列からオブジェクトを削除した後、オブジェクトをコアデータに渡して削除します

[context deleteObject:[arr objectAtIndex:0]];

これが問題である可能性があります。

これはきっとあなたを助けるでしょう。

これを使って:

[context deleteObject:[arr objectAtIndex:indexPath.row]];

[arr removeObjectAtIndex:indexPath.row];

ありがとう :)

于 2012-07-21T15:28:59.637 に答える
0

エラーメッセージを見ると、コードが失敗する理由は、コードの一部が存在しないインデックス123150308を探しているためです。完全なコードが表示されない場合、正確に何が間違っているかは不可能ですが、簡単な修正があります。

例外が「予期される動作」であるコードでの例外の問題を解決する良い方法は、@tryブロックを使用することです。これは、ブロックを配置したtableViewメソッドです。@try

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        @try {
            [arr removeObjectAtIndex:0];
            [context deleteObject:[arr objectAtIndex:0]];
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }
        @catch (NSRangeException *exception) {
            // Something was out of range; put your code to handle this case here
        }
    }
}

ただし、アプリの他の部分のコンテキストがないと、これがエラーであるかどうかを判断することはできません。これを試してみても機能しない場合は、アプリケーションのエラーがさらに深くなります

于 2012-07-21T15:30:25.643 に答える