清除UITableViewcaching

我的UITableView数据源根据用户操作在后台线程中得到更新。 我在前台显示细胞。 问题是如果新数据中的行数小于以前数据中的行数,我仍然可以看到在新行之后列出的旧行。

15-20秒后,这些旧的行会自动删除(有时会更快)。 或者,如果我去不同的屏幕,并回到我的tableview(数据源不变),旧的行不再存在。 我的猜测是有一些需要强制删除的caching。 任何想法如何做到这一点?

这是我的代码的快照

dispatch_async(queue, ^{ LoadingCompleted = NO; if ([lbl.text isEqualToString:@""]) { [self getData:month Year:year]; LoadingCompleted = YES; } dispatch_async(dispatch_get_main_queue(), ^{ if (LoadingCompleted) { mainDataSource = mainDataSourceCopy; [self.tableView reloadData]; } ); 

});

奇怪的输出,我在我的tableview:
新排1
新排2
老排3
老排4
老排5

您不能在后台线程中更改数据源数组,因为在修改期间可能会从主UI线程访问它。

您应该在后台线程中更新单独的数组,然后将其分配给主线程上的数据源数组:

 // ... compute newArray ... dispatch_async(dispatch_get_main_queue(), ^{ // Update data source array and reload table view. self.dataSourceArray = newArray; [self.tableView reloadData]; }); 

在表视图上使用-reloadData

 [tableView reloadData]; 

编辑:我注意到,你说你在后台线程上更新,所以以防万一使用performSelectorOnMainThread:withObject:waitUntilDone: ::

 [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 

或者你可以使用GCD的dispatch_async()

 dispatch_async(dispatch_get_main_queue(), ^{ // Set new data [tableView reloadData]; });