0

我正在使用 MBProgressHUD 显示带有加载动画的弹出窗口,但我遇到了问题。当我按下按钮时,会执行进度指示器调用。这是动作

- (IBAction)calendarioButtonPressed:(UIButton *)sender {

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeIndeterminate;
hud.labelText = @"Uploading";
[hud show:YES];
[self getCalendarioJson];
}

在 getCalendarioJson 我有这个

- (void) getCalendarioJson {

//LETTURA CALENDARIO - INIZIO
NSString *calLink = myLink;

NSData* responseData = [NSData dataWithContentsOfURL:[NSURL URLWithString:calLink]];


NSArray* json = [NSJSONSerialization
                 JSONObjectWithData:responseData //1
                 options:kNilOptions error:nil];
NSDictionary *firstObject = [json objectAtIndex:0];

NSDictionary *cal = [firstObject objectForKey:@"output"];
variabiliGlobali.calendario = [[NSMutableArray alloc] init];
for (NSDictionary *dict in cal) {
    [variabiliGlobali.calendario addObject: dict];
}

//LETTURA CALENDARIO - FINE

}

为什么加载弹出窗口只出现在 getCalendarioJson 执行结束时?该按钮有一个segue。当我从目标视图返回时,我可以看到弹出窗口。

米是什么?如果我删除 segue,我可以在 getCalendarioJson 执行结束时看到弹出窗口(因为没有 segue)。

提前致谢。

4

2 回答 2

0

你有一个方法[self getCalendarioJson];,但是这个方法在主线程中运行,主线程用于 UI 更新,当你下载数据或进行持续数秒的操作时,主线程等待 UI 更新。

为了解决这种情况,将方法放在后台线程中,你可以使用[self performSelectorInBackground:@selector(getCalendarioJson) withObject:nil];

于 2013-10-21T18:46:24.877 回答
0

来自https://github.com/jdg/MBProgressHUD

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.labelText = @"Loading";
[self doSomethingInBackgroundWithProgressCallback:^(float progress) {
    hud.progress = progress; //Here you set the progress
} completionCallback:^{
    [hud hide:YES];
}];

您应该设置进度值。

于 2013-10-22T10:01:52.663 回答