1

私は少し行き詰まりました。誰かが私を正しい方向に向けてくれることを願っています。シーケンスを格納する NSMutableArray があります。while ループで配列の内容を 1 つずつ取得できるように、列挙子を作成しました。

すべて正常に動作しますが、各呼び出しの間に 10 秒のギャップを置いてメソッドを呼び出す必要があります。現在、すべてを一度に (または非常に速い順序で) 再生します。メソッド呼び出し間の遅延を作成するには、何を確認する必要がありますか?

以下は私がこれまでに得たものです。ありがとう!

NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];
id element;

while(element = [enumerator nextObject])
{
    NSLog(element);

    int elementInt = [element intValue];
    [self.view showButton:elementInt];
}
4

6 に答える 6

3

ほとんどの場合、ループに「遅延」を入れたくありません。これにより、スレッドが終了するまでスレッドがブロックされます (また、アプリがマルチスレッドでない限り、すべてがブロックされます)。複数のスレッドを使用することもできますが、代わりに、別のセレクターの繰り返しの時間指定呼び出しでループを分割することになるでしょう。列挙子 (または現在のインデックス) を格納し、NSObject の performSelector:awithObject:afterDelay を確認します。

だから何か

[NSObject performSelector:@selector(some:selector:name:) withObject:objInstance afterDelay: 10]

セレクターが現在の列挙子をピックアップし、それを使用し、それを進めて、別の呼び出しをスケジュールします。この時間指定メソッドのセットが実行されている間は、コレクションへの変更を許可しないようにしてください。

于 2008-12-13T21:50:20.107 に答える
2

gameSequenceArray が配列の場合、列挙子を使用する必要はありません。

NSTimeInterval time = 10;

for (id elementId in gameSequenceArray) {

    [self.view performSelector:@selector(showButton:) withObject:elementID afterDelay:time];
}

次に、showButton を宣言します。

- (void)showButton:(id)anElement {
    ...
}
于 2008-12-15T11:18:32.267 に答える
2

余談ですが、Objective-C 2.0 のFast Enumerationを参照してください。

于 2008-12-13T21:40:34.290 に答える
2

これが NSTimer の目的です。NSTimer を使用して、配列内の各要素を順番に取得します。

于 2008-12-13T21:02:16.490 に答える
1

タイマーを使用してオブジェクト列挙子を渡すことになった場合は、配列の列挙が完了するまで配列の内容を変更できないことに注意してください。

于 2008-12-13T21:58:08.670 に答える
0

そこで、皆様のご意見を参考に考えた解決策がこちらです。

NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];

NSTimeInterval time = 5;

for (NSString *element in enumerator) {
    id elementId = element;

    time++;

    [self.view performSelector:@selector(showButton:) withObject:elementId afterDelay:time];
}

皆さん、私を正しい方向に向けてくれてありがとう。

于 2008-12-14T22:20:17.020 に答える