3

これは、必要に応じて 60 秒ごとにセレクターを繰り返し呼び出します。

autoDeleteTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:[SimpleDB class] selector:@selector(autoDelete:) userInfo:nil repeats:YES];

この次の行はそれをまったく呼び出していません。最初でも 60 秒後でもない:

autoDeleteTimer = [[NSTimer alloc] initWithFireDate: [NSDate dateWithTimeIntervalSinceNow:1] interval:60 target:[SimpleDB class] selector:@selector(autoDelete:) userInfo:nil repeats:YES];

誰でも理由を説明できますか?ありがとう。

4

1 に答える 1

6

2 番目のタイマーをメイン ループに追加する必要があります。

[[NSRunLoop mainRunLoop] addTimer: autoDeleteTimer forMode:NSDefaultRunLoopMode];

メソッドのドキュメントから:

- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

戻り値: 実行ループに追加されたときに date に起動し、repeats が YES の場合、その後は毎秒起動するように初期化されたレシーバー。

addTimer:forMode: を使用して、新しいタイマーを実行ループに追加する必要があります。起動すると、タイマーはメッセージ aSelector をターゲットに送信します。(タイマーが繰り返すように構成されている場合、後でタイマーを実行ループに再度追加する必要はありません。)

NSTimer Apple Doc

于 2013-10-16T13:42:46.050 に答える