2013-09-26 124 views
0

我正在创建一个列表并将其显示在UITableView中。查看时我想删除一个项目,然后保存更新的列表,让我用刷新按钮刷新旧列表。我使用一个按钮来保存当前列表,然后使用刷新按钮将数据重新加载到视图中。问题是保存按钮中的代码始终运行,即使我没有按下按钮。我可以解释最好是这样的: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被重载的数据源。我遇到的问题是,即使我不按btnSave,也会分配_ListCopy的值。在这种情况下,视图被清除。如果我注释掉_listCopy = new List<Tasks>();我收到一个空引用异常在这里表视图数据源行:指示我的_ListCopy值为空

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

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

+0

很难说出刚才所显示的情况。跳出来的第一件事是在更新数据源之前调用ReloadData() - 我期望它是另一种方式。其次,TableViews内置了删除项目的能力 - 为什么你不使用它?如果您发布更多代码,我们可能会提供更多帮助。 – Jason

+0

从表中删除正在工作。这是一个估算应用。为绘画业务。每个任务都会被计算并保存在一个列表中,然后可以在表格中查看。有时候,如果任务被删除,客户会想知道成本。我想存储原始估计值,然后做任何更改,但有能力恢复原始列表。我首先尝试简单地复制原始列表,当我按下重置按钮时,副本将被发送到表格数据源,但我无法轻松地使其工作。 – blue

回答

0

我发现我的网点设置错误。出于某种原因,我有两个插座连接到btnreset,并且没有btnsave的插座。所以当我按下复位键时,我也在烧掉btnsave的代码。我通过纠正我的网点解决了整个问题。至于制作原始列表的副本:我试图简单地为_ListCopy = _ListOfTasks保存功能。这只指向_ListOfTasks的内存位置,其中包含任何更改。我纠正了这个通过编写一个foreach循环一个列表复制到其他

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

现在,我可以按保存和第一估计被存储。我可以做任何删除,如果客户想要重新估计初始估计值,我可以刷新数据。