Redessiner un SFAuthorizationPluginView
-
21-12-2019 - |
Question
J'écris un AuthenticationPlugin personnalisé qui a du contenu dynamique (actuellement sous forme d'étiquettes).J'aimerais pouvoir mettre à jour les étiquettes en réponse aux événements.
En supposant les déclarations suivantes :
parent = SFAuthorizationPluginView (subclass)
view = NSView (subclass)
NSTextField *label = ...
Je modifie le texte de l'étiquette comme suit (remarque :cela peut être exécuté à partir de la file d'attente de répartition en arrière-plan) :
[label setStringValue:@"new text"];
J'essaie ensuite de forcer une mise à jour en utilisant ce qui suit :
[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]; });
Cependant, j'obtiens un mélange d'absence d'action et d'écran gris scintillant (indiquant que j'ai provoqué une exception).
Des idées?(Note:Je vais modifier cette question en essayant différentes options)
La solution
Je pense que tout ce que vous avez à faire est de mettre la mise à jour du label dans le code de la file d'attente principale comme ceci :
dispatch_async(dispatch_get_main_queue(), ^{
label.text = "Hello World!";
});