NSArrayの奇数オブジェクトのみを表示するUILabel
質問
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つの異なるアクションがあると思います。私はそこにブレークポイントを置き、あなたが思うべき場所で止まるかどうかを見ます。