سؤال

أنا أكتب برنامج 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!";
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top