清除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]; });