2016-05-12 5 views
2

私はUITableViewのアプリケーションを持っています。アプリケーションはサーバーと通信します。TableView: 'NSInternalInconsistencyException'を捕まえた後に進める方法?

クライアント1は、テーブルビューのセルを削除します。

問題は次のとおりです。データ更新は、クライアント2にデータ更新を送信するサーバに送信される。同時に、クライアント2は、TableViewからセルを削除する。受信中の更新のために、前と後のセル数が期待通りでないために差異が2でないため、NSInternalInconsistencyExceptionがスローされます。

アプリがクラッシュもちろん

[tableView endUpdates]; 

に私は

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

    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     @try{ 
      // Send data update to the server 
      [sender sendDataToServer:data]; 

      // Update tableview 
      [tableView beginUpdates]; 
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade]; 
      [tableView endUpdates]; 
     } 
     @catch (NSException * e) { 
      // Hide red delete-cell-button 
      tableView.editing = NO; 
      // Jump to previous ViewController 
      [self.navigationController popViewControllerAnimated:YES]; 
     } 
    } 
} 

で例外をキャッチすることができます。しかし成功したキャッチした後、私は[_UITableViewUpdateSupportのdeallocで

EXC_BAD_ACCESSの例外を取得します]。

アプリがクラッシュするのを防ぐにはどうすればよいですか?状況を「きれいにする」ためにキャッチブロックで何をしなければならないのですか?テーブルビューを再読み込みしても効果はありません。

EDIT:numberOfRows-方法は次のようになります。

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    return [dataSourceArray count]; 
} 
+2

あなたは*「クリーン」ではありません - あなたは***防止する必要があります***!この種の例外を発生させることができないようにコードを記述します。 – luk2302

+0

@Farleyあなたの 'numberOfRowsInSection'メソッドを書きます –

+0

あなたの配列からこのオブジェクトを削除しますか? – Lion

答えて

0

@synchronized(ロック)は私の問題を解決しました。

データソース配列を同時に操作できるスレッドが1つだけであることを確認するだけでした。今はすべて正常に動作し、それ以上のNSInternalInconsistencyExceptionはありません。

Thx to trojanfoeおよびluk2302。

関連する問題