0

我正在创建一个列表并将其显示在 UITableView 中。查看时我想删除一个项目,然后保存更新的列表,允许我使用刷新按钮刷新旧列表。我使用按钮保存当前列表,然后使用刷新按钮将数据重新加载到视图中。问题是保存按钮中的代码总是运行,即使我没有按下按钮。我可以这样解释最好:

btnSave.TouchUpInside += delegate { _ListCopy = new List<Tasks>();
}; 

btnReset.TouchUpInside += delegate {
tblTotal.ReloadData();
tblTotal.DataSource = new ListDataSource(_ListCopy,txtTotalCost);
};

tblTotal.DataSource = new ListDataSource (_ListOfTasks,txtTotalCost);

当我运行它时,表格视图显示_ListOfTasks列表,当我按下时btnReset,它_ListCopy被重新加载为数据源。我遇到的问题_ListCopy是即使我不按btnSave. 在这种情况下,视图被清除。如果我注释掉该行_listCopy = new List<Tasks>();,我会在此处的表视图数据源中收到空引用异常:

public override int RowsInSection (UITableView tableView, int section)
{ return _ListOfTasks.Count; }  <-- exception

向我表明 的值为_ListCopy空。我以为我可以_ListCopy = _ListOfTasks代替new List. 但是,由于某种原因,代码无论如何都在保存按钮中运行,所以我永远无法在需要时保存正确的列表值。为什么_ListCopy被赋值而不告诉它?我也没有在其他任何地方给它赋值。有人可以解释发生了什么吗?我可以使用其他解决方案吗?

4

1 回答 1

0

我发现我的网点设置错误。出于某种原因,我有两个连接到的插座,btnreset 而没有用于btnsave. 因此,当我按下重置时,我也触发了btnsave. 我通过纠正我的出口解决了整个问题。至于制作原始列表的副本:我试图简单地制作_ListCopy = _ListOfTasks保存功能。这仅指向 的内存位置_ListOfTasks,其中包括任何更改。我通过编写一个 foreach 循环将一个列表复制到另一个来纠正这个问题

foreach( var task in _ListOfTasks) 
{
    _ListCopy.Add(task);
}

现在我可以按保存并存储第一个估计值。我可以做任何删除,如果客户想重新访问最初的估计,我可以刷新数据。

于 2013-09-27T01:18:04.210 回答