[英]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.