我正在开发一个 iPhone 应用程序。
我正在从服务器进行异步更新。更新完成下载后,我发出 NSNotification
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_DATA_RECEIVED object:self userInfo:@{ @"updateKey": updateKey }];
在我的 viewController 我声明了观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateReceived:) name:NOTIFICATION_DATA_RECEIVED object:nil];
收到通知时将执行的选择器:
- (void) updateReceived:(NSNotification *)notification
{
[self performSelectorOnMainThread:@selector(updateData:) withObject:nil waitUntilDone:NO];
}
updateData
需要在主线程上执行,因为它会更改核心数据中的实体,并且除非我们使用某些特定的库,否则无法针对不同的威胁执行此操作。我不想改变它。
我的问题:
updateData
需要一段时间,它正在冻结 UI,因为它位于主线程上。完成后,我需要显示“正在加载数据...”叠加层。
我在视图控制器中有 2 个方法将显示覆盖:showLoadingOverlay
和hideLoadingOverlay
我需要在调用和完成showLoadingOverlay
时调用。updateData
hideLoadingOverlay
问题是,由于它是在主线程上执行的,所以我不知道如何在更新数据时显示覆盖。我尝试在发送通知之前直接显示它并在updateData
方法结束时将其隐藏,但它不起作用。
任何帮助是极大的赞赏。
谢谢