NSInternalInconsistencyException

NSInternalInconsistencyException

我有一个带有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。

08-26 19:19