0

objectAtIndex を定義する int があり、それが文字列に渡され、UILabel が配列を通過するときに配列を変更する (この場合は単語を追加する) と、UILabel に表示されます。奇数のものだけを表示します。私は NSLog を実行し、それがすべての単一のものを文字列に渡していることを発見しましたが、ラベルはすべてを表示しているわけではなく、最初にのみ表示し、次に配列を変更しましたが、奇妙なことしか行いません

編集: コード:

- (void) stuff {
    NSArray *indivwords = [sentence componentsSeparatedByString:@" "];
    count = [indivwords count]; //count=int
    if (i < count) {
        NSString *chunk = [indivwords objectAtIndex:i];
        [word setText:chunk];

        NSLog(chunk);
        i++;
    } else {
        word.textColor = [UIColor greenColor];
        [word setText:@"DONE"];
    }
}

これらはすべて、スライダーの値に基づいてオフに設定する NSTimer によって制御されています。また、IBAction で i が 0 に設定されている

IBAction コード:

word.textColor = [UIColor whiteColor];
[timer invalidate];
i = 0;

speedd = (1/speed.value)*60;



timer = [NSTimer scheduledTimerWithTimeInterval:(speedd) target:self selector:@selector(stuff) userInfo:nil repeats:YES];   

編集:

それを私が直した!私がしたことは、カウントに達した後にこれを呼び出すことでした

 -(void)stoptimer
{
[timer invalidate];
timer = [NSTimer scheduledTimerWithTimeInterval:(.01) target:self selector:@selector(empty) userInfo:nil repeats:YES];  
}

empty は何も入っていない単なる空虚です。まあ、コメントを追加しただけです。

//don't look over here, nothing to see here, oh look at that

必要に応じて誰かがこれを閉じることができます

4

2 に答える 2

1

NSTimer の時間間隔はスライダーによって制御されると言いました。おそらく、スライダーの値を変更するたびに新しいタイマー インスタンスを開始しているので、変更後は2 つのタイマーが実行されていることになります。最初のものはラベルを更新し、インクリメントしますi。2 番目のものは最初のものの直後に来て、iの値がインクリメントされているので、現在のチャンクではなく次のチャンクを表示します。

タイマーのインスタンスを数えます - タイマー コールバックでタイマーを NSLog し、結果を比較します - 複数のタイマーを起動している可能性があります。

于 2009-11-27T10:49:41.187 に答える
0

私の推測では、1つあるべきだと思うときに、このメソッドを呼び出す2つの異なるアクションがあります。そこにブレークポイントを設定して、必要な場所で停止するかどうかを確認します。

于 2009-11-27T02:58:36.723 に答える