文件的所有者认为它是超类

时间:2016-01-27 04:35:59

标签: objective-c xcode macos cocoa xib

我的界面构建器正在发生一些非常奇怪的事情。所以我在Xcode中创建了一个NSWindowController子类,并启用了create XIB选项。我开始编码,并成功连接到文件的所有者。

但是,当我运行我的应用程序时,我收到错误:

Failed to connect (workspaceControl) outlet from (NSWindowController) to (NSSegmentedControl): missing setter or instance variable
Failed to connect (workspaceField) outlet from (NSWindowController) to (NSTextField): missing setter or instance variable
Could not connect action, target class NSWindowController does not respond to -changeNumberOfWorkspaces:

我不知道为什么会出现这个错误,因为我的代码设置正确:

working code

File的所有者设置为正确的类(AddController):

file's owner

那么为什么它会尝试将我的视图连接到NSWindowController而不是我的子类?

编辑:

我实际在代码中使用AddController:

AppDelegate.h

appdelegate.h

AppDelegate.m

appdelegate.m

它在appdelegate中,因为它是一个菜单栏应用程序。 (如果有人想知道的话)

1 个答案:

答案 0 :(得分:3)

因为在正在运行的程序中实例化的实际对象是NSWindowController,而不是AddController。您已向我们展示AddController已正确声明,并且您已向我们展示您的笔尖的文件所有者设置为AddController;这很好,这就是为什么你没有得到关于错误连线的编译时警告或错误。但是你还没有向我们展示控制器对象实际被实例化的位置;并且检查可能会发现它没有被改为AddController。所以在运行时你有一个NSWindowController,这违反了你所承诺给IB的情况;所以你得到运行时错误。