从UITableView中删除行时出现NSInternalInconsistencyException

时间:2014-02-20 10:46:35

标签: ios uitableview xamarin.ios

我收到一条错误,表示我删除行后需要更新UITableView中的行数。我意识到这是因为我没有更新UITableView中的行数,我只是不确定如何在下面的代码中进行此更改。

非常感谢任何帮助。

! - 代码

        NSIndexPath[] rowsToReload = new NSIndexPath[] {
            NSIndexPath.FromRowSection(1, 1) 
        };

        dv.TableView.BeginUpdates ();

           dv.TableView.DeleteRows(rowsToReload,UITableViewRowAnimation.Automatic);

        dv.TableView.EndUpdates ();

! - 错误

名称:NSInternalInconsistencyException原因:无效更新:第1节中的行数无效。更新后现有部分中包含的行数(3)必须等于更新前该部分中包含的行数( 3)

2 个答案:

答案 0 :(得分:1)

上面的代码没问题。但是,您需要在之后将其称为,您已从数据源中删除了相应的项目。

例如,如果要从List<string>(myList)填充表视图,并且想要删除第一行:

myList.RemoveAt(0); // remove the item from the list first
NSIndexPath[] rowsToDelete = new NSIndexPath[] {
    NSIndexPath.FromRowSection(0, 0) 
};
dv.TableView.DeleteRows(rowsToDelete, UITableViewRowAnimation.Automatic);

无需在Begin / EndUpdates中包装DeleteRows调用,因为您只需要执行一个删除操作。当您有多个不同的动作(例如,DeleteRows + InsertRows)时,可以使用它,以便动画顺利执行。

答案 1 :(得分:0)

@Dimitris感谢您回答我的问题。我最终解决了这个问题:

  • 在我的UITableView上调用reload方法

    NSIndexPath[] rowsToReload = new NSIndexPath[] {
            NSIndexPath.FromRowSection(1, 1) 
        };
    
        dv.TableView.ReloadRows (rowsToReload,UITableViewRowAnimation.None);
    
  • 在我的UITableViewCell GetCell方法

我删除了第一次加载表格时包含的标签,字段和按钮。由于我的应用程序中的此屏幕只能看到一次,当用户第一次加载它时。