1

我在一个线程中做所有事情,并且刚刚开始转向异步调用,所以我有点困惑。

我想要的是加载视图,无论是空表还是根本没有表。MBProgressHUD 应该在异步调用获取数据时显示。然后当找到数据时,HUD 消失并且表格刷新。

我现在所拥有的一切正常,除了 HUD 显示在空表下方。这是最相关的代码。

- (void)awakeFromNib
{
    [super awakeFromNib];
    [MBProgressHUD showHUDAddedTo:self.tableView animated:YES];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        self.dataController = [[StudyController alloc] initWithCredentials:email password:password];
        dispatch_sync(dispatch_get_main_queue(), ^{
            [MBProgressHUD hideHUDForView:self.tableView animated:YES];
            [self.tableView reloadData];
        });
    });
}

我认为,基本上正在发生的事情是我所有正确渲染表的代码在异步调用运行时运行一次,并在 HUD 顶部显示一个空表,然后在调用后再次显示 reloadData . 我如何让它第一次不运行?

谢谢。

4

1 回答 1

0

如果没有看到您的表视图委托/数据源方法,很难衡量,但您的直觉是有道理的。在这种情况下,我可以看到两个选项:

  1. 如果表为空,请向您的委托/数据源方法添加一些逻辑以正确显示您的加载视图。
  2. 与其将加载视图添加到表视图,不如将加载视图添加到表视图的超级视图。这样,您可以确保加载视图始终位于表格视图的顶部。

我通常选择第二种方法,因为我更喜欢将我的数据源和委托方法只集中在表格视图上。

希望这可以帮助!

于 2013-08-20T19:47:57.017 回答