无法连接操作:到 NSApplication 类的目标

Posted

技术标签:

【中文标题】无法连接操作:到 NSApplication 类的目标【英文标题】:Could not connect the action: to target of class NSApplication 【发布时间】:2011-07-19 02:12:56 【问题描述】:

我在编译时不断收到Could not connect the action startServer: to target of class NSApplication 错误。我了解错误是什么,但不确定如何解决。不知何故,我的 xib 试图在不存在的 NSApplication 中调用 startServer 方法。

【问题讨论】:

【参考方案1】:

听起来好像您将 UI 元素连接到 File's Owner 对象,它是 NSApplication 的一个实例。

如果您还没有这样做,您希望将一个 NSObject 从 Xcode 4 中的 Object Library 调色板拖到布局左侧的边缘。完成并选择它后,选择身份检查器,然后在“类”字段中输入“WindowController”。

现在您已经获得了 WindowController 的表示,正如您所说,它包含 startServer:,那么您可以将您的 UI 元素连接到它。确保您的 startServer 方法采用以下形式:

- (IBAction)startServer:(id)sender

否则您将无法建立连接。

祝你工作顺利。

【讨论】:

我遗漏了(id)发件人,将其添加到修复中。在 ios 中,方法中是否没有参数无关紧要;为什么它在 Cocoa 中很重要?【参考方案2】:

您可以通过两种简单的方法解决此问题:

    [[YourWindowController alloc]initWithWindowNibName:XIB_YOUR_WINDOW_CONTROLLER]; 这里不要与所有者一起创建。所以NSApplication 不会是所有者。

    [[YourWindowController alloc]init]; 并在YourWindowController.m 文件中覆盖init 方法并调用self = [super initWithWindowNibName:XIB_YOUR_WINDOW_CONTROLLER];

1 或 2 都可以解决这个问题。

快乐编码....

【讨论】:

完美...我不知道我错过了这个。这为我解决了。【参考方案3】:

我遇到了同样的问题,但终于解决了。我不确定这是否适合你,但试试这个:

(在界面生成器上)

从库中,将一个 NSObject 拖到您的 XIB 文档窗口中。 通过将它们连接到 NSObject 来断开已连接到文件所有者的对象。 将 NSObject 重命名为合适的名称。 突出显示 NSObject,转到 Inspector。 在 Class Identity 下,搜索刚刚重命名的 NSObject 的名称。 保存!

看看它是否适合你!它现在让我的工作了!祝你好运!

【讨论】:

谢谢。点赞。我不明白为什么 OSX 与使用 NSObject 的 iOS 开发如此不同?【参考方案4】:

您已在主 nib 中与文件所有者建立了连接,您可能打算连接到其他东西。你在哪个类中实现了-startServer:

【讨论】:

startServer 在我的 WindowController.m 中

以上是关于无法连接操作:到 NSApplication 类的目标的主要内容,如果未能解决你的问题,请参考以下文章

从 xcode 创建一个“命令行工具”项目,然后设置并运行 NSApplication。此应用程序中的光标无法更改

在 PyObjC 中为 openFile 实现 NSApplication 委托协议

Cocoa:将 NSApplication 集成到现有的 c++ 主循环中

让我的 Cocoa 应用程序响应键盘播放/暂停键?

在默认的 Xcode OS X 应用程序模板中,File's Owner == NSApplication?

退出应用程序的方式之间的区别:exit()、NSApp/NSApplication 终止