Pergunta

Estou escrevendo um AuthenticationPlugin personalizado que possui algum conteúdo dinâmico (atualmente na forma de rótulos).Gostaria de poder atualizar os rótulos em resposta aos eventos.

Supondo as seguintes declarações:

  • parent = SFAuthorizationPluginView (subclass)
    • view = NSView (subclass)
      • NSTextField *label = ...

Eu edito o texto do rótulo da seguinte maneira (nota:isso pode ser executado a partir da fila de despacho em segundo plano):
[label setStringValue:@"new text"];

Em seguida, tento forçar uma atualização usando o seguinte:

  • [label setNeedsDisplay:YES];
  • dispatch_async(dispatch_get_main_queue(), ^{ [label setNeedsDisplay:YES]; });
  • [label display];
  • dispatch_async(dispatch_get_main_queue(), ^{ [label display]; });
  • [[label cell] update];
  • dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] update]; });
  • [[label cell] needsDisplay];
  • dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] needsDisplay]; });
  • [view setNeedsDisplay:YES];
  • dispatch_async(dispatch_get_main_queue(), ^{ [view setNeedsDisplay:YES]; });
  • [self updateView];
  • dispatch_async(dispatch_get_main_queue(), ^{ [self updateView]; });
  • [self displayView]
  • dispatch_async(dispatch_get_main_queue(), ^{ [self displayView]; });

No entanto, recebo uma mistura de nenhuma ação e tela cinza tremeluzente (indicando que causei uma exceção).

Alguma ideia?(Observação:Estarei editando esta pergunta enquanto tento várias opções)

Foi útil?

Solução

Acho que tudo que você precisa fazer é colocar a atualização do rótulo no código da fila principal assim:

dispatch_async(dispatch_get_main_queue(), ^{
 label.text = "Hello World!";
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top