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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top