Frage

Ich schreibe ein benutzerdefiniertes AuthenticationPlugin, das dynamische Inhalte enthält (derzeit in Form von Labels).Ich möchte die Beschriftungen als Reaktion auf Ereignisse aktualisieren können.

Gehen wir von folgenden Deklarationen aus:

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

Ich bearbeite den Beschriftungstext wie folgt (Hinweis:Dies kann aus der Hintergrund-Versandwarteschlange ausgeführt werden):
[label setStringValue:@"new text"];

Ich versuche dann, ein Update zu erzwingen, indem ich Folgendes verwende:

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

Ich erhalte jedoch eine Mischung aus keiner Aktion und einem flackernden grauen Bildschirm (was darauf hindeutet, dass ich eine Ausnahme verursacht habe).

Irgendwelche Ideen?(Notiz:Ich werde diese Frage bearbeiten, während ich verschiedene Optionen ausprobiere.)

War es hilfreich?

Lösung

Ich denke, alles, was Sie tun müssen, ist, die Aktualisierung des Etiketts wie folgt in den Hauptwarteschlangencode einzufügen:

dispatch_async(dispatch_get_main_queue(), ^{
 label.text = "Hello World!";
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top