-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 秒後にメソッドが起動されるようにスケジュールされているためです。次のコマンド。

ただし、アプリが正常に読み込まれ、doWork600 秒後にメソッドでスタックする場合は、Web サービスの呼び出し方法 (同期呼び出しと非同期呼び出し) が原因である可能性があります。

したがって、他の人が言ったように、さらにコードを表示しない限り、あまり役に立ちません。

于 2012-12-07T19:14:49.880 に答える
0

問題は、applicationDidBecomeActiveで起動されたNSTimerに関するもののようです。これにより、実行ループが使用可能になる前にNSTimerが作成された可能性があります。アプリケーションで起動するNSTimerをコメント化すると、アプリが起動しないように修正されたようです。

于 2012-12-20T01:35:17.013 に答える