Вопрос

Я пишу собственный плагин 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