3

いらっしゃいませ!私は午前中ずっとこれに取り組んでいましたが、バナナはありませんでした。多分あなたは洞察力を持っています!

私は標準で作業していますNSMutableArray:

self.itemTable = [[NSMutableArray alloc]
                 initWithObjects:@"House.",
                 @"Car.",
                 @"Keys.", nil];

ナビゲーションバーで「編集」を押して行を削除すると、次のエラーメッセージが表示されます

キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。更新前のセクション (3)、そのセクションから挿入または削除された行数 (0 挿入、1 削除) のプラスまたはマイナス、およびそのセクションに移動された、またはセクションから移動された行の数 (0 移動、0 移動)アウト)。'

「削除」コマンドに次のコードを使用します。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {


[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

}

行削除機能を機能させる方法についての洞察はありますか?

編集

それを見つけた:作業中の次のコード行を配置する:

[self.itemTable removeObjectAtIndex:indexPath.row];

これにより、削除コードが作成されます。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {

[self.itemTable removeObjectAtIndex:indexPath.row];

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

}
4

3 に答える 3

1

私は同じ問題に直面しました。回避策を見つけた後、解決策を見つけました。ここで私のクラッシュは、実際には、配列から項目を削除した後に tableview reload を呼び出したことが原因でした。クラッシュ レポートでは、セクション内のテーブルビュー行を編集/更新する前後は等しくなければならないことが記載されていました。

ベローコードは正常に動作しています:

 // Override to support editing the table view.
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
     if (editingStyle == UITableViewCellEditingStyleDelete)
     {
        //add code here for when you hit delete
        [self deleteItemAtRowIndex:indexPath];
    }
}


-(void)deleteItemAtRowIndex:(NSIndexPath *)indexpath
{
[pTableDataDataArray removeObjectAtIndex:indexpath.row];

[pTableView beginUpdates];
//[self LoadTempletesData];    no need to reload, simply remove row that to is to be delete
[pTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexpath] withRowAnimation:UITableViewRowAnimationNone];
//make changes
[pTableView endUpdates];
}

それが他の人に役立つことを願っています

于 2015-03-27T08:02:57.370 に答える
0

テーブルのコンテンツを追加または削除するたびに、データ ソースを更新することを忘れないでください。これは、データ ソース自体からフェッチされます。

于 2015-03-27T09:05:54.293 に答える
0

(お気づきのようですが) 行を挿入または削除する前に、データソースを更新する必要があります。場合によっては、行の追加や削除のような手の込んだことをしたくなるでしょう。(行のサブセクションを非表示にして別のセクションを表示するためにこれを行いました)。両方を行う必要がある場合は、この構造を使用できます

[tableView beginUpdates];
//make changes
[tableView endUpdates];
于 2013-06-21T03:32:32.340 に答える