質問

objectAtIndexを定義するintがあり、それを文字列に与えます。UILabelを実行すると、配列を変更する(この場合は単語を追加する)ときに、それをUILabelに表示します。配列を通して、奇数のもののみを表示します。 NSLogを実行し、文字列に1つ1つ渡すことを確認しましたが、Labelにはすべての文字が表示されず、最初に表示されるだけです。その後、配列を変更します。 / p>

編集:コード:

- (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によって制御されており、NSTimerはスライダーの値に基づいて制御します。また、IBActionで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

誰かが望むならこれを閉じることができます

役に立ちましたか?

解決

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

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

他のヒント

1つあるべきだと思ったときに、このメソッドを呼び出す2つの異なるアクションがあると思います。私はそこにブレークポイントを置き、あなたが思うべき場所で止まるかどうかを見ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top