2012-01-22 9 views
1

は、私のような何かを持っている:私はアイバーズを使用することはできませんNSTimerの問題:間違ったロジックですか?ここ

void start() { for (id i in something) { [i start]; } } 
void finish() { for (id i in something) { [i finish]; } } 

static NSTimer *timer = nil; 

@implementation aClass 
- (void)start { 
    if (!timer) timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(change) userInfo:nil repeats:YES]; 
} 

- (void)change { /* ... */ } 
- (void)finish { [timer invalidate]; } 
@end 

注意をし、あなたが呼ばれる-startを持つaClassインスタンスがたくさんあると仮定することができますよう。

私はここで自分自身の問題に直面していると思います。ただ1つのインスタンス(最初に-startと呼ばれる)が-changeを同時に呼び出すためです。私はsomething配列から最初のオブジェクトを削除する場合は、2番目は大丈夫になりますので、それは、他のインスタンスとの問題ではない、と他の人が問題に直面しています。

私はいくつかの明白な間違っているのでしょうか? (私は、すべてのインスタンスで同じグローバルを使用しようとしていると思います...)。そのような問題を解決するにはどうすればよいですか?

答えて

3

あなたはあなたのクラスのすべてのインスタンスに対して1つだけtimerポインタがあることを意味する静的NSTimer変数を、使用しています。 timerはもはやnilではないので、-startが呼び出される最初のインスタンスは、それ自体にタイマーの目標を設定し、他のものは何もしません。再び

あなたは、これが問題であるべき理由を私は理解していない、timerポインタにIVARを使用する必要があります...

+0

、私は** **使用アイバーズすることはできません。 (もしできれば、この回答は私の問題を解決したはずです) – Matoe

+0

そして、どうしてですか?関連付けられたオブジェクトを使用することができます。 –

+0

私もそのことを考えましたが、私はそれについていくつかの問題を抱えていました。私はもう一度それを与えるだろうが、ありがとう! – Matoe

関連する問題