我正在创建一个列表并在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
在没有说明的情况下被赋值?我也没有在其他任何地方为它赋值。有人可以解释发生了什么吗?我可以使用不同的解决方案吗?
答案 0 :(得分:0)
我发现我的插座设置错误了。出于某种原因,我有两个网点连接到btnreset
而没有连接btnsave
。因此,当我按下重置时,我也开始关注btnsave
的代码。我通过纠正我的网点解决了整个问题。至于制作原始列表的副本:我试图简单地为保存功能设置_ListCopy = _ListOfTasks
。这仅指向_ListOfTasks
的内存位置,其中包含任何更改。我通过编写foreach循环将一个列表复制到另一个
foreach( var task in _ListOfTasks)
{
_ListCopy.Add(task);
}
现在我可以按保存并存储第一个估算值。我可以做任何删除,如果客户想要重新审视初始估算,我可以刷新数据。