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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top