Pregunta

Estoy escribiendo un contenido de autenticación personalizado que tiene algún contenido dinámico (actualmente en forma de etiquetas). Me gustaría poder actualizar las etiquetas en respuesta a los eventos.

Suponiendo las siguientes declaraciones:

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

I Edite el texto de la etiqueta de la siguiente manera (Nota: Esto puede ejecutarse desde la cola de despacho de fondo): [label setStringValue:@"new text"];

Luego intento forzar una actualización usando lo siguiente:

  • [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]; });

Sin embargo, obtengo una mezcla de ninguna acción y parpadeo en pantalla gris (indicando que he causado una excepción).

¿Alguna idea? (Nota: Voy a editar esta pregunta a medida que pruebe varias opciones)

¿Fue útil?

Solución

Creo que todo lo que necesita hacer es poner la actualización de la etiqueta en el código de la cola principal como este:

dispatch_async(dispatch_get_main_queue(), ^{
 label.text = "Hello World!";
});

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top