Domanda

Sto scrivendo un'autenticazione personalizzataPlugin che ha alcuni contenuti dinamici (attualmente sotto forma di etichette). Mi piacerebbe poter aggiornare le etichette in risposta agli eventi.

Supponendo le seguenti dichiarazioni:

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

Modifica il testo dell'etichetta come segue (Nota: questo può essere eseguito dalla coda di spedizione in background):
[label setStringValue:@"new text"];

Penso a forzare un aggiornamento utilizzando quanto segue:

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

Tuttavia, ottengo una miscela di nessuna azione e lo schermo grigio sfarfallio (indicando che ho causato un'eccezione).

Qualche idea? (Nota: Modificherò questa domanda mentre provo varie opzioni)

È stato utile?

Soluzione

Penso che tutto ciò che devi fare è mettere l'aggiornamento dell'etichetta nel codice Queue principale come questa:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top