我正在使用sqlite数据库创建一个应用程序。我使用从Web服务检索的信息更新数据库。我从AppDelegate调用Web服务,如下所示:
-(void)applicationDidBecomeActive:(UIApplication *)application{
// get new information from web service
// update sqlite database
}
网络服务可能需要很长时间,因此我想将UIActivityIndicatorView
添加到任何有效的viewController
。当然,在更新完成后删除它。
想法?
答案 0 :(得分:0)
- (void)applicationDidBecomeActive:(UIApplication *)application
{
testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 420, 480)];
testView.backgroundColor = [UIColor redColor];
[self.window.rootViewController.view addSubview:testView];
}
然后,无论何时完成,请执行:
[testView removeFromSuperview];
答案 1 :(得分:0)
在每个视图控制器(或公共超类视图控制器)中,监听应用程序激活时发送的UIApplicationDidBecomeActiveNotification
通知。
通过这种方式,您可以为每个视图控制器提供自定义逻辑,而无需通过使用大量ifs将应用委托委托给代码的其他部分(如果您需要区分哪个视图控制器是活动的)。
答案 2 :(得分:-1)
因为您的视图层次结构可以采用任何形式,所以您必须自己跟踪当前可见的视图控制器。例外:如果您的应用程序中的所有内容都发生在UINavigationController中,您始终可以使用此方法获取当前视图控制器。
[navigationController topViewController];
但是,如果只需要显示叠加层,则可以将该视图添加到根视图控制器的视图中;无论如何,所有子视图控制器都只是作为子视图显示。
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self.window.rootViewController.view addSubview:activityIndicator];
[activityIndicator startAnimating];
尽管如此,手动将视图投入到这样的混合中并不是很优雅。我会考虑在发生各种网络事件时发布通知,并让每个视图控制器自行更新。