ios - 清除 UITableView 缓存

标签 ios uikit

我的 UITableView 数据源会根据用户操作在后台线程中更新。我正在重新显示前景中的单元格。问题是如果新数据中的行数少于先前数据中的行数,我仍然可以看到新行之后列出的旧行。

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

这是我的代码的快照

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

});

我在表格 View 中得到的奇怪输出:
新行 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];
});

关于ios - 清除 UITableView 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041329/

相关文章:

ios - Realm Object 子类的实例在初始化时为 null

iPhone 范围 slider

ios - UIView.convertPoint 没有按预期工作

iphone - 值 1e100f 代表什么?

ios - UITableView 在使用 Swift 中的 Master Detail App 滚动之前不会重新加载

ios - 如何从 ios 应用程序上传视频到 YouTube?通过使用 Oauth2 和 YouTube DATA 类

ios - Xcode 可以构建项目但不能在模拟器上运行

iOS - [CLPlacemark 时区] : unrecognized selector iOS 8

ios - iOS 9 应用程序关闭时如何向服务器发出请求?

ios - 如何绑定(bind) SwiftUI 和 UIViewController 行为