Я работаю с архитектурой документа в Cocoa, но создаю свое собственное окно вместо наконечника. Я заменяю NSApplicationMain кодом, который работал для приложений , а не, используя архитектуру документа.Сбой инициализации NSApplication: создание нескольких приложений
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSApplication *app = [[NSApplication alloc] init];
AppDelegate *appDelegate = [[AppDelegate alloc] init];
[app setDelegate:appDelegate];
[app run];
}
}
Но с архитектурой документа, когда я создаю окно (я знаю, что это не так, чтобы создать одну, но для простоты) ...
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
NSWindow *window = [[NSWindow alloc] init];
}
... Я получаю ниже.
*** Assertion failure in -[NSApplication init], /SourceCache/AppKit/AppKit-1344.72/AppKit.subproj/NSApplication.m:1787
Я прочитал все руководство по архитектуре документа, попытался создать в окне много мест, и принял тщательное рассмотрение в соответствии с процедурой, которая поддерживает архитектуру, как изображение с ссылкой ниже шоу.
http://i.stack.imgur.com/RR3nK.png
Все, что я пытался приводит к ошибке выше всякий раз, когда я создаю окно, независимо от того, где я создаю его. Один из возможных источников ошибок заключается в том, что я начинаю процесс создания документа с OpenUntitledDocumentAndDisplay:error:
внутри моего метода appмоего приложения appDelegate, и в этом случае NSApplication может рассмотреть это как создание документа слишком рано.
Вкратце, почему создание объекта окна в архитектуре документа приводит к ошибке NSApplication, в частности, что я создаю несколько приложений?
Фрагмент кода, по-видимому, находится в противоречии с изображением png, на которое вы ссылаетесь, - при распределении оголенного окна отсутствует NSWindowController, NSDocument и NSDocumentController. Но ты это так говоришь. Поэтому я спрошу, переопределяете ли вы defaultType в подклассе NSDocumentController? Вы переопределяете makeWindowControllers в подклассе NSDocument? Если да, зачем вам явно создавать оконный контроллер?Вы должны получить один из makeWindowControllers. – stevesliva
Трудно сказать, не видя ваш код, но я бы предположил, что вы уничтожили какую-то другую часть логики «NSAppplication», а проблема с окном - просто красная селедка. – cacau
Я не вижу причины переопределять defaultType. Правильный тип читается из info.plist. Да, я переопределяю makeWindowControllers (но не в простом примере выше), и внутри этого метода вручную создается окно. Когда я создаю это окно, которое он жалуется. Я переписал приложение в новом шаблоне, но получил такую же ошибку. –