使用任何形式的progressHUD(SV,MB等)我遇到这个问题,HUD在显示后立即隐藏或永久停留在那里。在下面的示例中,无论Twitter提要(或其他视图控制器的页面)是否已完成加载,HUD都会永久保留。如何在单独线程中的任务完成后使HUD消失?
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
//Sets the auth key (user or app) for the RMACC Twitter Feed
STTwitterAPI *twitter = [STTwitterAPI twitterAPIOSWithFirstAccount];
[twitter verifyCredentialsWithSuccessBlock:^(NSString *username) {
[twitter getUserTimelineWithScreenName:@"RMACCNewsNotes" count:10 successBlock:^(NSArray *statuses) {
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
self.twitterFeed =[NSMutableArray arrayWithArray:statuses];
[self.tableView reloadData];
} errorBlock:^(NSError *error){ }];
} errorBlock:^(NSError *error) {
[self twitterselfauthrequest];
}];
});
}
答案 0 :(得分:1)
块中的安全捕获self
:在第一个块中使用:__weak typeof (self) weakSelf = self;
。
您正在呼叫[self.tableView reloadData];
而不是主线程;
此请求:getUserTimelineWithScreenName
可能会在错误中完成:在这种情况下,您没有登录,因此请确保它已成功完成。
答案 1 :(得分:1)
它应该是这样的:
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// do all your twitter stuff, including the error checking
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});
答案 2 :(得分:0)
我发现了两件可能有问题的事情:
你确定这条线是在主线程中启动的吗?
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
你确定这条线路一直在推出吗?
[MBProgressHUD hideHUDForView:self.view animated:YES];