あなたの問題のスクリーンキャストを見ましたが、少し前に直面した問題と非常によく似ています。次のようなシートを開始するメソッドがありました(特定の値が存在すると仮定します):
- (IBAction)beginSheet:(id)sender
{
[[NSApplication sharedApplication] beginSheet:sheet
modalForWindow:[self mainWindow]
modalDelegate:self
didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo:self];
}
シートには、あなたのようなテキスト ビューは含まれていませんでしたが、代わりにテーブル ビューが含まれていました。テーブル ビューが完全に機能する場合もあれば、それを囲むスクロール ビューがスクロール バーを不完全に描画し、スクロールしようとすると広大な空白領域が生じる場合もあります。
-beginSheet:
セカンダリ スレッドで が呼び出された場合にのみ不安定な動作が発生することがわかりました。
これを改善するために、代わりに次のアプローチを採用しました。
- (void)beginSheetOnMainThread:(id)sender
{
[[NSApplication sharedApplication] beginSheet:sheet
modalForWindow:[self mainWindow]
modalDelegate:self
didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo:self];
}
- (IBAction)beginSheet:(id)sender
{
[self performSelectorOnMainThread:@selector(beginSheetOnMainThread:) withObject:sender waitUntilDone:YES];
}
テーブルビューは一貫して正しく動作しました。
(後で、メイン キューとブロックで dispatch_async() アプローチを使用することも非常にうまく機能することを知りました。)
これでも特定の問題が解決しない可能性があることを承知の上で、事例証拠についてお詫び申し上げます。しかし、繰り返しになりますが、あなたのスクリーンキャストを見て、私は症状が非常によく知られていることに気付きました.