2

アプリがバックグラウンドになったときにタイマーを無効にしようとしています。タイマーを開始するボタンを押すと、TimerController.m ファイルにあるタイマーが呼び出されます。呼び出される方法は次のとおりです。

    mytimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];//Timer with interval of one second
    [[NSRunLoop mainRunLoop] addTimer:mytimer forMode:NSDefaultRunLoopMode];

さて、アプリがバックグラウンドになったときに mytimer を無効化したいので、[mytimer invalidate]; を入れてみました。- (void)applicationDidEnterBackground:(UIApplication *)application メソッドに、アプリがデリゲートします。ただし、デリゲートで宣言されていないため、これは機能しません。TimerController.h をデリゲートに含めることで、これは機能すると思いましたが、機能しません。

だから、私はここで何をしているのかはっきりとわかりません。手伝ってくれますか?アプリがバックグラウンドになったときに mytimer が無効になるようにするにはどうすればよいですか?

4

2 に答える 2

11

UIApplicationDidEnterBackgroundNotificationアプリケーションがバックグラウンドになったときに投稿される通知もあります。コントローラーでこの通知をサブスクライブし、そこで遷移を処理できます。

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(goBackground)
    name:UIApplicationDidEnterBackgroundNotification
    object:nil];

// and later:
- (void) goBackground {
    [timer invalidate], timer = nil;
}
于 2010-12-15T16:09:15.140 に答える
0
if (timer) {
        [timer invalidate];
        timer = nil;
    }

アプリケーションでReEnteredForeground通知メソッドも機能します

于 2015-02-19T11:07:53.657 に答える