Ipad -performSelector:afterDelay:和模态视图控制器

Ipad -performSelector:afterDelay:和模态视图控制器,ipad,ios,modalviewcontroller,Ipad,Ios,Modalviewcontroller,在我的应用程序中,我有一个作为模式视图控制器显示的登录屏幕。一旦用户成功登录,模式视图将被取消,应用程序的数据将从web服务更新。然后,用户可以使用下载的新数据 我们定期检查是否需要将任何数据同步回服务器。为此,我们在AppDelegate中使用一组函数,定期轮询任何更改。我们有一种方法可以启动轮询: - (void) startBackgroundSync { if (self.queue == nil) { self.queue = [[NSOperationQueu

在我的应用程序中,我有一个作为模式视图控制器显示的登录屏幕。一旦用户成功登录,模式视图将被取消,应用程序的数据将从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
中是否存在会使该视图控制器创建的运行循环中的任何内容无效的内容?

转到此处了解更多详细信息,但“dismissing”模式控制器会将应用程序返回到其以前的状态。维护运行循环的建议方法是从模式控制器为您请求一名代表

我用您描述的项目制作了一个简单的应用程序(两个长寿命的视图控制器,其中一个发布了performSelector:withObject:afterDelay:),它似乎工作得很好。也许还有其他原因阻止doBackgroundSync向自己注册新呼叫?