这里发生了什么?
http://screencast.com/t/WACeaQP00iqb
这是该按钮的代码(三个方法调用spawn 3(是3;我没有编写服务器:D)异步数据任务需要一些时间才能完成):
- (IBAction)didTouchClockButton:(id)sender {
[self.dr isUserClockedIn];
hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.dimBackground = NO;
// hail mary
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Do something...
if (![self.dr isNetworkDead])
if ([self.dr isUserClockedIn]) { // add clock in / clock out function to this button
hud.labelText = @"Clocking Out..";
[self.dr clockOut];
} else {
hud.labelText = @"Clocking In..";
[self.dr clockIn];
}
});
}
我把hud解雇放在一个KVO回调中,这个回调还没有工作,但首先要做的事情。
答案 0 :(得分:0)
您不想在后台线程上执行与UI相关的任何操作。在主线程上调度MBProgressHUD代码,看看是否能解决问题。尝试:
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Do something...
if (![self.dr isNetworkDead])
if ([self.dr isUserClockedIn]) { // add clock in / clock out function to this button
dispatch_async(dispatch_get_main_queue(), ^{
hud.labelText = @"Clocking Out..";
});
[self.dr clockOut];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
hud.labelText = @"Clocking Out..";
});
[self.dr clockIn];
}
});
答案 1 :(得分:0)
在调用更新其他视图元素的方法之前,我最终解除了HUD线。现在它们都发生在瞬间,所以它很好,但如果视图在HUD失效后仍在更新,那将是蹩脚的。因此解决方案是在HUD处于活动状态时不要弄乱视图。一个混乱的解决方案,所以如果有人有一个更好的解决方案,我会全力以赴。