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

Posted

技术标签:

【中文标题】无法连接操作:到 NSApplication 类的目标【英文标题】:Could not connect the action : to target of class NSApplication 【发布时间】:2014-02-15 04:33:06 【问题描述】:

我来自 Cocoa 触摸背景,有一点我被困住了,我试图从头开始创建一个 ViewController 并将我的 xib 中的对象连接到我的新 ViewController 中的操作。我将文件的所有者更改为我的 ViewController 并添加了 outlet,编译器似乎对我所做的很满意。

但是当我运行我的应用程序时,连接似乎失败了:“无法连接动作开始:到 NSApplication 类的目标”,但是这个 NSApplication 引用隐藏在哪里?据我所知,我的 ViewController 有一个 NSViewController 类。

ViewController : NSViewController

【问题讨论】:

查看您的 .h 文件,如果它显示“@interface ViewController : NSViewController”,请告诉我。 B.T.W.,你应该永远在你的子类视图控制器名称中如此通用......使用像“HillsonsViewController”这样的东西怎么样? .h 文件说 @interface ViewController : NSViewController 另外,“NSApplication”对象通常隐藏在您的“MainMenu.xib”文件中(也就是说,如果您使用的是 XIB 文件)。您是否在 .m 或 .h 文件中的任何位置声明了“start:”操作?这是唯一失败的连接还是有其他连接(因为您使用了单词 connections 的复数形式)? 【参考方案1】:

我将文件的所有者更改为我的 ViewController 并添加了 outlet,编译器似乎对我所做的很满意。

当然,编译器不会在意——这是一个运行时错误。听起来您正在使用 MainMenu.xib 文件。该文件由应用程序对象加载。即使您在 .xib 中更改了 File's Owner 的类型,加载 .xib 的对象仍然是应用程序。

您可能希望创建一个单独的 .xib 文件供您的视图控制器加载。您将 that 文件中的 File's Owner 类型更改为您的视图控制器类!将东西连接到文件的所有者,它应该可以正常工作,因为您的视图控制器确实将是加载文件的对象。

【讨论】:

是的,我现在看到我的 MainMenu.xib 已由应用程序对象加载。 只是为了好奇,有没有办法控制哪个对象加载哪个xib,或者那不是你想走的路? 应用程序希望加载主 .xib 文件,但您当然可以控制哪些对象加载其他 .xib 文件。视图控制器通常从 .xib 文件加载其视图层次结构,因为这很有用,但您可以使用 NSNib 加载 .xib 并创建您喜欢的任何对象的所有者。

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

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

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

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

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

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

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