2

秒ごとに更新する必要がある iOS アプリ (FW: 5.0+ & ARC) に取り組んでいます。

現在、私はこれをメソッド内に持っています(-ViewDidLoadのときにperformSelectorで呼び出されます):

-(void)FireOnload {
counter = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(countDownTime) userInfo:nil repeats:YES];
[counter fire];
[[NSRunLoop mainRunLoop] addTimer:counter forMode: NSDefaultRunLoopMode]; // <-- Causing Problem
}

-(void)countDownTime
{
double timeNow = [[NSDate date] timeIntervalSince1970];
double timeLeft = timeEnding - timeNow;

if(timeLeft < 60) // Less then 60 seconds, do something.
{
   //Do Stuff
}

}

変数はcounterヘッダーで NSTimer として呼び出されます。[counter fire]1 秒後ではなく、ビューが読み込まれるとすぐに呼び出されるように、明示的に呼び出します。

これは iOS シミュレーターでは問題なく動作し、毎秒起動しますが、iDevice に移動するとクラッシュします。

この行をコメントアウトしましたがNSRunLoop、iDevice はクラッシュしません。ただし、毎秒更新されなくなりました。

ここで何が間違っていますか?

4

2 に答える 2

2

問題が見つかりました:

かわった:

@property (weak, nonatomic) NSTimer *counter;

に:

@property (strong, nonatomic) NSTimer *counter;

ARC を使用していない場合は、次のものに置き換える必要がありますstrongretain

于 2012-03-27T21:29:12.407 に答える
0

あなたはperformSelectorFireOnLoad を呼び出すために使用すると言います。なんで?バックグラウンド スレッドで呼び出す場合は、NSRunLoop がスレッド セーフではないことを知っておく必要があるため、メイン スレッド以外でメインの実行ループにアクセスしないでください。

于 2012-03-27T08:42:15.783 に答える