在我的应用程序中,我有一个登录屏幕,显示为模态视图控制器。用户成功登录后,将取消模式视图,并从Web服务更新应用程序的数据。然后,用户可以使用下载的新数据。
我们会定期检查是否需要将任何数据同步回服务器。我们通过在AppDelegate
中使用一组定期轮询任何更改的函数来完成此操作。我们有一种方法可以启动轮询:
- (void) startBackgroundSync {
if (self.queue == nil) {
self.queue = [[NSOperationQueue alloc] init];
}
[self performSelector:@selector(doBackgroundSync) withObject:nil afterDelay:5.f];
}
然后-doBackgroundSync
实际检查更改并向NSOperationQueue
添加同步操作。然后它会自行重置:
-(void) doBackgroundSync {
NSLog(@"Check for changes");
// check for changes and add operation to queue
[self performSelector:@selector(doBackgroundSync) withObject:nil afterDelay:5.f];
}
最初,我们从模态登录视图控制器调用-startBackgroundSync
(在它被解除之前)。然后我们更改其他一些设置并关闭模态视图控制器。解雇时不会释放登录视图控制器,但AppDelegate会保留该登录视图控制器(以后我们必须“重新锁定”应用程序)。模态视图控制器被解除后,-doBackgroundSync
永远不会被调用。如果我们在取消模态视图控制器后显示的主视图控制器中调用-startBackgroundSync
,则会按预期连续调用-doBackgroundSync
。
什么会导致这种行为? -dismissModalViewController
中是否有某些内容会使该视图控制器创建的运行循环中的任何内容无效?
答案 0 :(得分:0)
到这里了解更多细节View Controller Programming Guide for iOS,但“解雇”模态控制器会将应用程序返回到先前的状态。建议的维护运行循环的方法是从模态控制器向您委托代表。