質問

動的コンテンツ(現在はラベルの形式にある)を持つカスタム認証プラジンを書きます。イベントに応じてラベルを更新できるようにしたいのですが。

次の宣言を想定しています。

  • 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