0

在我的应用程序中,我有一个显示为模式视图控制器的登录屏幕。一旦用户成功登录,模式视图就会被关闭,应用程序的数据会从 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在模态视图控制器关闭后显示的主视图控制器中调用 for,则按-doBackgroundSync预期连续调用。

什么会导致这种行为?是否有一些东西-dismissModalViewController会使该视图控制器创建的运行循环中的任何内容无效?

4

1 回答 1

0

转到此处以获取更多详细信息View Controller Programming Guide for iOS,但“关闭”模态控制器会将应用程序返回到其先前状态。维护你的运行循环的建议方法是从模态控制器为你请求一个代表。

于 2010-10-15T14:47:32.740 回答