簡體   English   中英

NSApplication初始化失敗:創建多個應用程序

[英]NSApplication init failure: Creating more than one Application

我正在使用Cocoa中的文檔體系結構,但是將創建自己的窗口而不是筆尖。 我將NSApplicationMain替換為適用於使用文檔體系結構的應用程序的代碼。

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:applicationDidFinishLaunching:notification方法內使用OpenUntitledDocumentAndDisplay:error:開始文檔創建過程,在這種情況下,NSApplication可能認為這太早創建了文檔。

簡而言之,為什么在文檔體系結構中創建窗口對象會導致NSApplication錯誤,特別是我要創建多個應用程序?

看我自己的代碼,不用NSApplicationMain() ,就不會alloc init NSApplication實例。

您應該執行此操作-使用sharedApplication單例生成器方法:

NSApplication *application = [NSApplication sharedApplication];

例如, 在此處查看答案 我還談到了其他一些在不使用NSApplicationMain()時會中斷的事情。

@cacau讓我着那個斷言。 它在您在應用程序的第一行中調用的NSApplication init方法中。 如果設置了異常斷點,看起來是否發生了異常?

希望有幫助,盡管我希望您會遇到更多問題。 對於基於文檔的應用程序,我還沒有做過noNSApplicationMain事情。

對於它的價值, sharedApplication參考指出:

此方法還建立與窗口服務器的連接並完成其他初始化。 您的程序應將此方法作為main()中的第一條語句之一來調用; 如果使用Xcode創建應用程序,則此調用已為您完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM