Xcode 创建了一个返回错误"missing setter or instance variable"的 Xib 文件



在花了整个下午和晚上试图了解它是如何工作的之后,我尝试在这里询问以解决我的问题。

我在Xcode中创建了一个Cocoa应用程序。我删除了默认的 MainMenu.xib 文件以创建我自己的文件。

现在我有:

  • 名为AppDelegate.swift的文件,包含以下部分代码

    @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate {

  • 名为Window.swift的文件,其中包含以下代码:

    类窗口:NSWindowController {

  • 一个名为Window.xib的文件没有连接(插座集),因为我试图了解如何设置它,所以我删除了所有已经创建的文件,以便尝试重新创建它。

问题是,即使我可以在Window : NSWindowsController类中链接一个按钮(以前与接口生成器一起插入到窗口中),它也会返回错误

Failed to connect (button) outlet from (NSApplication)
to (NSButton): missing setter or instance variable 

我不明白为什么,因为唯一的连接是现在定义的连接,并且没有更多可能的连接可以做(我试图在屏幕上链接一些组件以查看一些锚区域但没有出现)。

因此,即使有一些问题可以分析这个问题,因为答案是用户做错了什么,我也会尝试解释如何执行连接,以便重新创建它并了解问题出在哪里。

仅出于完整性考虑,在 Windows.xib 中,下界文件的所有者、第一响应者或应用程序才会在"连接"检查器面板中显示链接。

  1. 删除 AppDelegate 中的@NSApplicationMain注释.swift
//@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate {
  1. add main.swift in 项目中。 例如
import Cocoa
autoreleasepool {
let delegate = AppDelegate()
// NSApplication delegate is a weak reference,
// so we have to make sure it's not deallocated.
withExtendedLifetime(delegate, {
let application = NSApplication.shared
application.delegate = delegate
application.run()
application.delegate = nil
})
}

参考:MainMenu.xib 是如何在 Cocoa 中找到的?

首先,如果你是 Mac 和 Xcode 开发的新手,请坚持这条规则:在你知道它们是什么之前不要删除它们

Mac app 项目是复杂的东西,有很多——我的意思是很多——相互关联的部分。

其中一个部分是嵌入在应用程序捆绑包中的Info.plist文件。它包含有关应用的重要信息(它创建/打开的文档类型、应用的版本等)。但它最重要的功能之一是启动您的应用程序。

该文件中有一些关键信息。其中几个决定了应用程序的启动方式。具体来说,NSMainNibFile("主 nib 文件基名称")确定将加载以创建应用程序对象的 nib 文件。

在您创建的应用程序项目中,这将默认为 - 请鼓滚动 -MainMenu

在该属性中命名的 nib 文件传统上包含应用程序的工作菜单(因此,其名称)。但它也负责实例化您的NSApplicationDelegate并将该委托对象连接到您的NSApplication对象。如果这些事情在启动时没有发生,那么从字面上看,您没有应用程序。

我的建议是重新开始一个新项目。继续添加它。在委托或窗口控制器中定义操作,创建一些出口,创建一些视图或控件对象,然后连接它们,设置一些断点,并获得乐趣。

但是,在您了解它们扮演什么角色以及应用程序如何组装之前,不要删除内容,因为......这很复杂。

最新更新