私はココアのユーザーインターフェイスを開発する際にgui/threading関連の問題が発生しています。アプリケーションは、このように設計されていますメイン以外のスレッドでCocoa GUIを実行する
メインスレッド(#1):引数、負荷プラグインなどを解析し
グイスレッド(#?):GUIは、イベントなどを扱う起動し、そのGUIスレッド。
Cocoaフレームワークはスレッドセーフではありませんが、1つのルールを強制します.GUIはメインスレッドで実行する必要があります。これを確認するためにアサーションが使用されます。これを回避しようとすると、これに続いて自分でrunメソッド(以下のコード)を実装しました - http://cocoawithlove.com/2009/01/demystifying-nsapplication-by.html - guide。しかし、私は何かが足りない。ウィンドウが開きますが、空白(完全に白い)のままです。私がメインスレッドで呼び出しを行うと、それは完全に動作しますが。
基本的に私は何が欠落しているのか把握する必要があります。
- (void)run
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self finishLaunching];
shouldKeepRunning = YES;
do
{
[pool release];
pool = [[NSAutoreleasePool alloc] init];
NSEvent *event =
[self
nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
dequeue:YES];
[self sendEvent:event];
[self updateWindows];
} while (shouldKeepRunning);
[pool release];
}
- (void)terminate:(id)sender
{
shouldKeepRunning = NO;
}
あなたのスレッドを使用しているものを逆にする必要があるように見えます。なぜフレームワークと戦うのですか? –
私はむしろプログラムのプラグインアーキテクチャと戦わないので...しかし、私はこの1つを認めなければならないと思うので... – OCarlos