2

次のコードでNSTimerを停止しようとしています。

- (void)viewDidLoad
{
    [super viewDidLoad];
    timer3 = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(start) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer3 forMode:NSDefaultRunLoopMode];
}

-(void)invalidate
{  
    [timer3 invalidate];
    timer3 = nil; 
}

-(void)invalidateそして私はこのような別のクラスから呼び出します:

-(void)timer
{
    ClassOfMyTimer *class = [[ClassOfMyTimer alloc] init];
    [class invalidate];
}

しかし、タイマーは止まりません。誰かが私が間違っていることを知っていますか?

4

2 に答える 2

4

タイマーを作成したクラスinvalidateの同じインスタンスでメソッドを呼び出す必要があります。メソッドで、timer独自のタイマーを持つ可能性のあるクラスの新しいインスタンスを作成し、それを無効にします。

于 2012-06-24T19:14:21.947 に答える
1

ここで何をしようとしているのか混乱していますが、timer3への参照を維持していないと思います。

タイマーの.hファイルにプロパティを作成しましたか?

@property (strong) NSTimer *timer3;

次に、.mファイルにsynthesisステートメントを追加しました。

@synthesize timer3;

次に、viewDidLoad:で、作成しているタイマーへの参照を次の方法で維持できます。

self.timer3 = [[[NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(start) userInfo:nil repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:self.timer3 forMode:NSDefaultRunLoopMode];

そして、後でタイマーを無効にするには:

[self.timer3 invalidate]
self.timer3 = nil

プレビューでは、Svenはあなたに影響を与える可能性のある問題に対する有効な解決策も持っています。

于 2012-06-24T19:16:01.513 に答える