我对iOS仍然非常环保,但下面的代码似乎应该可行。我在后台做了很多工作,所以忙碌的指标"应该在工作完成时向用户显示。但是发生的事情是忙碌指示器几秒钟内没有出现。只有大部分工作(但不是全部)完成后才会出现。
- (void) fetchDataTest {
// next line will create and display a busy indicator
__block MRProgressOverlayView *overlay = [MRProgressOverlayView showOverlayAddedTo:self.view title:@"Loading…" mode:MRProgressOverlayViewModeIndeterminate animated:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^(void) {
[self fetchData];
dispatch_async(dispatch_get_main_queue(), ^(void) {
[overlay hide:YES];
});
});
}
我有很多日志记录(上面没有显示)运行得太慢我可以看输出日志(包括线程ID)并看到叠加已经创建并开始后台工作 - 但我的设备上没有覆盖几秒钟。
如何立即显示叠加效果?
答案 0 :(得分:0)
观察:
dispatch_async
之前没有发生的事情,而不是其中的内容; fetchDataTest
执行什么线程或队列?它应该是主要队列。关于最后一点:UIKit通常不是线程安全的。除了少数例外,您应该始终从主队列中使用它。这是当前主队列的主要部分:所有用户交互。然后繁重的工作应该在别处传递。