2

我有一个 UITableViewController,它应该在后台获取数据,然后刷新 UITableView。但是,当我在后台运行 update 方法时,它会破坏整个应用程序中的所有过渡动画(将视图控制器推到导航堆栈时的幻灯片)。奇怪的是,完全相同的模型在与这个非常相似的其他类中工作。这是我用于后台更新的调用:

[self performSelectorInBackground:@selector(updateData) withObject:nil];

然而,这是可行的,但当然不是在后台完成的:

[self updateData];

最后运行的方法:

- (void)updateData{
    updating = YES;
    [progress show:YES];
    dataSource = [[NetworkHandler sharedInstance:self] getRaces];
    [progress hide:YES];
    updating = NO;
    [self.tableView reloadData];
}

更新标志绝不是对信号量的尝试,只是一种确保在用户在视图之间来回切换时视图不会被更新两次的方法。;)

4

2 回答 2

5

[self.tableView reloadData];看起来它可能会导致某种线程问题。UI 的所有更新都应该在主线程中完成。所以这应该工作:

[self.tableView performSelectorOnMainThread:@selector(reloadData)];

于 2012-05-31T09:58:42.900 回答
1

截至 2015 年 2 月,上述答案中提到的方法已被弃用,取而代之的是:

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
于 2015-02-11T14:25:47.517 回答