Xcode创建了一个Xib文件,它返回错误"缺少setter或实例变量"

时间:2018-01-28 00:56:53

标签: swift xcode macos cocoa

花了整个下午和晚上尝试了解它是如何工作的,我试着在这里要求解决我的问题。

我在Xcode中创建了一个Cocoa App。我删除了默认的MainMenu.xib文件,以便创建自己的文件。

现在我有:

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

    @NSApplicationMain   class AppDelegate:NSObject,NSApplicationDelegate {

  • 名为Window.swift的文件,代码如下:

    类Window:NSWindowController {

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

问题是,即使我可以在Window : NSWindowsController类中链接一个按钮(之前插入Interface Builder进入窗口),它也会返回错误

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

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

所以,即使有一些问题可以分析这个问题,但是给出了用户做错了什么的答案,我试着解释如何执行连接以重新创建它并理解问题所在。< / p>

仅为了完整性,在Windows.xib中,下载文件的所有者,第一响应者或应用程序在“连接”检查器面板中显示链接。

2 个答案:

答案 0 :(得分:1)

首先,如果您是Mac和Xcode开发的新手,请遵循以下规则:在您知道它们的内容之前不要删除

Mac应用程序项目很复杂 - 我认为很多 - 互连部分。

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

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

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

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

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

但是在你明白他们扮演什么样的角色以及应用程序如何组合之前不要删除它们,因为......这很复杂。

答案 1 :(得分:1)

  1. 在AppDelegate.swift中删除@NSApplicationMain批注
  //@NSApplicationMain 
  class AppDelegate: NSObject, NSApplicationDelegate {
  1. 在项目中添加main.swift。 例如
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
 })
}

参考:How is MainMenu.xib found in Cocoa?