我有一个带有UITableView
的应用程序。该应用程序与服务器通信。
问题如下:
客户端1删除TableView的单元格。数据更新被传输到服务器,服务器将数据更新发送到客户端2。与此同时,客户端2从TableView中删除一个单元格。由于接收更新,抛出NSInternalInconsistencyException
,因为之前和之后的单元格数量与预期的不同(差异为2而不是1)。
该应用程序崩溃
[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异常。
我该怎么做以防止应用程序崩溃?我必须在捕获区中做什么以“清理”情况?重新加载tableview无效。
编辑:numberOfRows方法看起来像这样:
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [dataSourceArray count];
}
最佳答案
@synchronized(lock)解决了我的问题。
我只需要确保只有一个线程能够同时操作数据源数组。现在一切正常,不再出现“NSInternalInconsistencyException”。
Thx到trojanfoe和luk2302。