Ridisegnando un sfauthizationpluginview.
-
21-12-2019 - |
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)
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!";
});
.