我的界面生成器发生了非常奇怪的事情。因此,我在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:


我不知道为什么会出现此错误,因为我已正确设置了代码:

objective-c - 文件的所有者认为这是父类(super class)-LMLPHP

并且文件的所有者设置为正确的类(AddController):

objective-c - 文件的所有者认为这是父类(super class)-LMLPHP

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

编辑:

我在代码中实际使用AddController的位置:

AppDelegate.h

objective-c - 文件的所有者认为这是父类(super class)-LMLPHP

AppDelegate.m

objective-c - 文件的所有者认为这是父类(super class)-LMLPHP

它在appdelegate中,因为它是一个菜单栏应用程序。 (以防有人在想)

最佳答案

因为在您正在运行的程序中实例化的实际对象是NSWindowController,而不是AddController。您已经向我们展示了正确地声明了AddController,并且已经向我们展示了您的笔尖的文件所有者被设置为AddController;太好了,这就是为什么您不会收到有关错误连接的编译时警告或错误的原因。但是您还没有向我们展示控制器对象的实际实例化位置。并检查一下,大概可以发现它尚未更改为AddController。因此,在运行时,您会得到一个NSWindowController,这违反了您对IB的承诺。因此您会遇到运行时错误。

关于objective-c - 文件的所有者认为这是父类(super class),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35028973/

10-12 14:31