UILabel mostra solo oggetti dispari in NSArray
Domanda
Ho un int che definisce objectAtIndex, che lo dà alla stringa, che poi lo visualizza in UILabel, TUTTAVIA, quando modifico l'array (aggiungo una parola in questo caso) quando ho UILabel vai attraverso l'array visualizza solo quelli dispari. Ho creato un NSLog e ho scoperto che PASSA OGNI SINGOLA COSA alla stringa, ma l'etichetta non visualizza tutti, lo fa solo la prima volta, quindi modifico l'array e fa solo dispari
modifica: il codice:
- (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"];
}
}
Tutto questo è controllato da un NSTimer, che lo imposta in base a un valore del dispositivo di scorrimento. Anche i è impostato su 0 nell'IBAction
Il codice 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];
EDIT:
L'ho risolto! Quello che ho fatto è stato chiamarlo dopo aver raggiunto il conteggio
-(void)stoptimer
{
[timer invalidate];
timer = [NSTimer scheduledTimerWithTimeInterval:(.01) target:self selector:@selector(empty) userInfo:nil repeats:YES];
}
vuoto è solo un vuoto senza nulla, beh, tutto ciò che ho fatto è stato aggiungere un commento
//don't look over here, nothing to see here, oh look at that
Qualcuno può chiuderlo se lo desidera
Soluzione
Hai detto che l'intervallo di tempo del tuo NSTimer è controllato da un cursore. Forse stai avviando una nuova istanza del timer ogni volta che cambi il valore del dispositivo di scorrimento, quindi dopo una modifica avresti due timer in esecuzione. Il primo aggiorna l'etichetta e incrementa i
. Il secondo arriva subito dopo il primo e trova il valore di i
incrementato, quindi mostra il pezzo successivo invece di quello attuale.
Conta le istanze del tuo timer - NSLog il timer nella richiamata del timer e confronta i risultati - è possibile che tu ne stia sparando più di uno.
Altri suggerimenti
La mia ipotesi è che tu abbia due diverse azioni che chiamano questo metodo, quando pensi che dovrebbe essercene una. Metterei un punto di interruzione e vedo se si ferma dove pensi che dovrebbe.