我正在使用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
无论我在何处创建窗口,每当我创建窗口时,我尝试的所有内容都会导致上述错误。一个可能的错误来源是我在appDelegate的OpenUntitledDocumentAndDisplay:error:
方法中使用applicationDidFinishLaunching:notification
开始文档创建过程,在这种情况下,NSApplication可能会将其视为过早创建文档。
简而言之,为什么在文档体系结构中创建窗口对象会导致NSApplication错误,特别是我正在创建多个应用程序?
答案 0 :(得分:2)
在没有NSApplicationMain()
的情况下查看自己的代码,您不必alloc init
NSApplication
个实例。
你应该这样做 - 使用sharedApplication
单例生成器方法:
NSApplication *application = [NSApplication sharedApplication];
例如,请参阅the answer here。我还谈到了在NSApplicationMain()
未使用时会破坏的其他一些事情。
NSApplication init
方法中。如果设置异常断点,它看起来是否会发生异常?
希望有所帮助,但我希望你会遇到更多问题。对于基于文档的应用程序,我还没有完成no-NSApplicationMain的事情。
对于它的价值,sharedApplication
引用说:
此方法还连接到窗口服务器并完成其他初始化。您的程序应该将此方法作为main()中的第一个语句之一调用;如果您使用Xcode创建应用程序,则会为您完成此调用。