UILabel única exibir objetos estranhos em NSArray
Pergunta
Eu tenho um int que define o objectAtIndex, o que lhe confere para a cadeia, que, em seguida, exibe no UILabel, no entanto, quando eu modificar a matriz (adicionar uma palavra a ele, neste caso) quando eu tiver movimento UILabel através da matriz só exibe os ímpares. Eu tenho feito um NSLog e descobri que ele faz PASS cada coisa para a cadeia, mas o rótulo não está exibindo cada um, ele só faz isso pela primeira vez, então eu modificar a matriz, e isso só faz estranho
edit: o código:
- (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"];
}
}
Tudo isso está sendo controlado por um NSTimer, que define-lo com base em um valor slider. Também i é definido como 0 na IBAction
O código 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:
I fixa-lo! O que fiz foi chamar isso depois que eu atingido a contagem
-(void)stoptimer
{
[timer invalidate];
timer = [NSTimer scheduledTimerWithTimeInterval:(.01) target:self selector:@selector(empty) userInfo:nil repeats:YES];
}
vazia é apenas um vazio sem nada dentro, bem, tudo o que fiz foi adicionar um comentário,
//don't look over here, nothing to see here, oh look at that
Alguém pode fechar esta se quiserem
Solução
Você disse que o intervalo de tempo do seu NSTimer é controlado por um controle deslizante. Talvez você está começando uma nova instância temporizador cada vez que você alterar o valor slider, então depois de uma mudança que você teria dois temporizadores em execução. O primeiro atualiza o rótulo e incrementos i
. O segundo vem logo após o valor da primeira e achados de i
incrementado, por isso exibe o próximo pedaço em vez do atual.
Conte as instâncias do seu temporizador - NSLog o temporizador no retorno de chamada timer e comparar os resultados -. Pode ser que você está disparando mais de um
Outras dicas
Meu palpite é que você tem duas ações diferentes de chamar esse método, quando você acha que deve haver um. Eu ia colocar um break point lá, e ver se ele pára onde você acha que deveria.