0

第一次使用HUD,我很困惑。

我在 viewDidLoad 中这样设置 HUD:

[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    [[[WSXmppUserManager shared] xmppStreamManager] connect];

    dispatch_async(dispatch_get_main_queue(), ^{
        [MBProgressHUD hideHUDForView:self.view animated:YES];
    });
});

HUD 不显示。我认为原因如下。xmppconnect方法触发到 xmpp 服务器的连接请求,然后完成。因此,无需等待任何活动。

但是,在服务器响应并触发以下委托方法之前,连接不会建立:

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender

我想等待这个,然后才解除HUD,但我不知道如何做到这一点。我错过了一些非常简单的东西。

4

2 回答 2

0

您需要移动此代码

dispatch_async(dispatch_get_main_queue(), ^{
    [MBProgressHUD hideHUDForView:self.view animated:YES];
});

在您长时间运行的方法完成后......也就是说,如果这段代码确实立即返回

[[WSXmppUserManager shared] xmppStreamManager] connect];

hud 可能永远不会显示......因为它被告知显示,然后被告知隐藏在同一个运行循环或之后的一个运行循环上......

如果这表示已收到响应并且操作已完成,为什么不将其放在此方法的末尾?

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
于 2013-05-04T06:36:14.620 回答
0
HUD =[[MBProgressHUD alloc] initWithWindow:self.view];
[HUD setDelegate:self];
[self.view addSubview:HUD];

[HUD showWhileExecuting:@selector(connectToServer)
               onTarget:self
             withObject:nil
               animated:YES];

在 connectToServer

-(void)connectToServer
{
    [[[WSXmppUserManager shared] xmppStreamManager] connect];
}

一旦 connectToServer 方法在后台完成它的任务,一个名为 hudWasHidden: 的 MBProgressHUD 代表就会自动被调用

-(void)hudWasHidden:(MBProgressHUD *)hud
{
     //Further work after the background task completed
}
于 2013-05-04T07:55:02.730 回答