إعادة رسم SFAuthorizationPluginView
-
21-12-2019 - |
سؤال
أنا أكتب برنامج AuthenticationPlugin مخصصًا يحتوي على بعض المحتوى الديناميكي (حاليًا في شكل تسميات).أود أن أكون قادرًا على تحديث التصنيفات استجابةً للأحداث.
بافتراض الإقرارات التالية:
parent = SFAuthorizationPluginView (subclass)
view = NSView (subclass)
NSTextField *label = ...
أقوم بتحرير نص التسمية على النحو التالي (ملاحظة:يمكن تنفيذ هذا من قائمة انتظار الإرسال في الخلفية):
[label setStringValue:@"new text"];
ثم أحاول فرض التحديث باستخدام ما يلي:
[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]; });
ومع ذلك، أحصل على مزيج من عدم اتخاذ أي إجراء وشاشة رمادية وامضة (تشير إلى أنني تسببت في حدوث استثناء).
أيه أفكار؟(ملحوظة:سأقوم بتحرير هذا السؤال أثناء تجربة الخيارات المختلفة)
المحلول
أعتقد أن كل ما عليك فعله هو وضع تحديث الملصق في رمز قائمة الانتظار الرئيسية مثل هذا:
dispatch_async(dispatch_get_main_queue(), ^{
label.text = "Hello World!";
});
لا تنتمي إلى StackOverflow