2012-03-09 5 views
0

ユーザーがUITableViewから行を削除しようとしたときにアプリケーションがクラッシュし、デバッガでSIGABRTエラーが発生します。ここでテーブルビューの行を削除しようとするとSIGABRTエラーでアプリケーションがクラッシュする

は削除のために私のコードです:

- (void) tableView:(UITableView *)tableView 
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
    [[self displayedObjects] removeObjectAtIndex:[indexPath row]]; 


    // Animate deletion 
    NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
    [[self tableView] deleteRowsAtIndexPaths:indexPaths 
          withRowAnimation:UITableViewRowAnimationFade]; 
    //[[self tableView] deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]]; 
    } 
} 
+0

オブジェクトの前の行を、displayedObjects内で削除してみてください。 –

+0

私はあなたの問題が何であるかを知っていると思います。私は答えを投稿します – JTApps

+0

ありがとうRaphael Ayres私はあなたの考えを試みたが、うまくいかなかった。 – Ali

答えて

0

を、私は別の質問に助けを得ました。問題は、オブジェクトが配列から削除されてから、テーブルビューから行を削除する前に、numberOfRowsInSectionが再度呼び出され、ディスクから配列を再度読み込み、問題のために削除前の番号を与えることですアレイのロード。私はnumberOfRowsInSectionにブレークポイントを設定しました。

0

はあなた[self displayedObjects]の項目数カバー[indexPath row]していますか?たとえば、[self displayedObjects]には5つのアイテムしかありませんが、removeObjectAtIndex:6にしたいとします。

+0

はい。私は、正しいオブジェクトを正しく削除して、displayedObjects配列を見ることができます。それは私のアプリケーションがクラッシュするテーブルビューの行を削除しようとするときだけです。 – Ali

0

あなたが間違っていた場所を私のコードと比較しました。

 //Removes From Table 
    [favorites removeObjectAtIndex:indexPath.row]; 
    [tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 

お気に入りは私の配列です。

[[self displayedObjects] removeObjectAtIndex:[indexPath row]]; 

まず、この1の直前にその行を置く:

[[self tableView] deleteRowsAtIndexPaths:indexPaths 
          withRowAnimation:UITableViewRowAnimationFade]; 

をしてから、アレイの名前にselfを変更私はあなたがする必要があるとしていると考えることは、この行を変更していますテーブルが表示されています。

ALSO!非常に重要

表が表示されていることを、配列はNSArrayのでNSMutableArrayませNSArray

である、あなたは(追加または削除)の値を変更することはできませんことを確認してください。しかし、あなたができるNSMutableArrayと、私は間違っていない場合、あなたはこのコードを呼び出しているあなたはNSArray

+0

Raphael Ayresが彼のコメントで言っていることはあなたが言っていることだと思います:tableview行を削除してからtableviewがそのデータを取り出す配列からオブジェクトを削除しようとしています。私はそれを試みたが、それはまだクラッシュする。 – Ali

+0

配列が可変であることを確認しましたか? – JTApps

+0

はい。それは変更可能です。ところで、私はそれをシリアル化しているし、NSArrayをNSMutableArrayのコピーを作成するNSArrayを与えるそれをunserializingしています。私はこれが問題を起こさないことを願っています。 1つのオブジェクトを適切に削除している配列が見えます。私は行の削除に問題があると思う。 – Ali

0

が表示されていないことを確認してください。

[[self tableView] deleteRowsAtIndexPaths:indexPaths 
          withRowAnimation:UITableViewRowAnimationFade]; 

コミット削除イベント内から。私はあなたが "tableView:commitEditingStyle:forRowAtIndexPath:"メソッドからバッキングストアを更新するだけでよいと信じています。削除はすでにコミットされています。後でテーブルビューをリフレッシュする必要があるかもしれません。また、テーブルビューに更新を許可するものとしてマークしてください。

は、このコードのすべてをコメントアウトしてみて、何が起こるかを教え:

// Animate deletion 
NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
[[self tableView] deleteRowsAtIndexPaths:indexPaths 
         withRowAnimation:UITableViewRowAnimationFade]; 
+0

私のバッキングストアの更新に関して、私はそれが私がやっていることだと思います。私はこの行の '' displayObjects''という配列を更新しています: '[[self displayedObjects] removeObjectAtIndex:[indexPath row]];'そして配列から適切なオブジェクトを適切に削除しています。私は行の削除を提案しコメントしたことをしました。アプリがクラッシュすることはありませんが、別のビューに移動して変更を確認するまで戻ってこない限り、行は削除されません。私はテーブルをリロードするために結んだが、それはいずれも役に立たなかった。この行はクラッシュを引き起こしますが、テーブル行を削除するにはどうすればよいでしょうか? – Ali