У меня возникла проблема, связанная с графическим интерфейсом/поточностью при разработке пользовательского интерфейса какао. . Приложение разработано следующим образом:
Основной поток (#1): анализирует аргументы, загружает плагины и т. д.
Поток графического интерфейса (#?): запускает графический интерфейс, обрабатывает события и т. д. Это поток графического интерфейса.
Каркас Cocoa не является потокобезопасным, но применяет одно правило: графический интерфейс должен работать в основном потоке. Для проверки этого используется утверждение. Чтобы попытаться обойти это, я сам реализовал метод запуска (код ниже), следуя этому - http://cocoawithlove.com/2009/01/demystifying-nsapplication-by.html- руководство. Но я что-то упускаю. Окно открывается, но остается пустым (полностью белым). Хотя, если я делаю вызов в основном потоке, он работает отлично.
В общем, мне нужно выяснить, чего не хватает.
- (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;
}