-1

我有一个 iOS 应用程序,一些客户说它不会加载,他们会无限期地看到一个微调器。此微调器在应用程序委托中启动。

如果我在 applicationDidBecomeActive 委托中放置一个断点然后让 xcode 运行,我终于能够重现这一点。这里调用了一个 NSTimer。

我想知道这是否是其他人看到的,这个代表和 NSTimers 是否有冲突?

编辑:内存中的代码示例。稍后我将不得不在这里获取实际代码。

-(void)applicationDidBecomeActive:(UIApplication *)application {    
  [self toggleOpen];    
}

- (void)toggleOpen {      
  if (!self.timer) {
      self.timer = [NSTimer scheduledTimerWithTimeInterval:600 target:self selector:@selector(doWork) userInfo:nil repeats:YES];
  } else {
        [self.timer invalidate];
        self.timer = nil;
  }
}
- (void)doWork {
  //Under certain conditions calls a web service (rarely)
}
4

2 回答 2

1

如果应用程序根本无法加载并且只显示自启动以来的微调器,则不可能是因为计时器,因为它只是将doWork方法安排为在应用程序激活后 600 秒触发,然后继续下一个命令。

但是,如果应用程序加载正常,然后doWork在 600 秒后卡在方法中,则可能是因为调用 Web 服务的方式(同步调用与异步调用)。

因此,就像其他人所说的那样,除非您显示更多代码,否则无济于事。

于 2012-12-07T19:14:49.880 回答
0

问题似乎与在 applicationDidBecomeActive 中触发的 NSTimer 有关。这可能在运行循环可用之前创建了一个 NSTimer。在 applicationDidBecomeActive 中注释掉要触发的 NSTimer 似乎已经修复了该应用程序从不启动的问题。

于 2012-12-20T01:35:17.013 回答