gpt4 book ai didi

objective-c - NSApplication初始化失败: Creating more than one Application

转载 作者:行者123 更新时间:2023-12-03 17:02:18 24 4
gpt4 key购买 nike

我正在使用 Cocoa 中的文档架构,但将创建我自己的窗口而不是 Nib 。我将用适用于不使用文档架构的应用程序的代码替换 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

我已阅读有关文档架构的完整指南,尝试在多个位置创建窗口,并仔细考虑以适应架构支持的过程,如下面带有链接的图像所示。

/image/RR3nK.png

每当我创建窗口时,无论我在哪里创建它,我所尝试的一切都会导致上述错误。一个可能的错误来源是我在 appDelegate 的 applicationDidFinishLaunching:notification 方法中使用 OpenUntitledDocumentAndDisplay:error: 开始文档创建过程,在这种情况下,NSApplication 可能会将其视为过早创建文档。

简而言之,为什么在文档架构中创建窗口对象会导致 NSApplication 错误,特别是我正在创建多个应用程序?

最佳答案

看看我自己在没有 NSApplicationMain() 的情况下执行的代码,您不会alloc init NSApplication 实例。

您应该这样做 - 使用 sharedApplication 单例生成器方法:

NSApplication *application = [NSApplication sharedApplication];

例如,参见 the answer here 。我还讨论了一些其他在不使用 NSApplicationMain() 时会中断的事情。

@cacau 这个说法让我眯起了眼睛。它位于您在应用程序第一行调用的 NSApplication init 方法中。如果设置异常断点,看起来是不是异常发生了?

希望这对您有所帮助,但我预计您会遇到更多问题。我还没有为基于文档的应用程序完成 no-NSApplicationMain 的事情。

对于它的值(value),sharedApplication 引用说:

This method also makes a connection to the window server and completes other initialization. Your program should invoke this method as one of the first statements in main(); this invoking is done for you if you create your application with Xcode.

关于objective-c - NSApplication初始化失败: Creating more than one Application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29351691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com