(NSMenuItem):缺少setter或实例变量

时间:2015-04-02 10:29:26

标签: macos swift

我遇到一个奇怪的错误:

2015-04-02 12:20:14.642 test[21167:257788] Failed to connect     
(testApp) outlet from (test.AppDelegate) to (NSMenuItem): missing 
setter or instance variable
inserted id: 122

我在菜单中添加了一个menuItem并将一个函数连接到它时发生了。

我不知道问题是什么。该应用程序工作正常,但我不认为忽略错误是一个明智的想法。 setter或实例变量是什么意思?为什么需要?

更新:以下是相关代码:

import Cocoa
import Foundation

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet weak var window: NSWindow!
@IBOutlet weak var statusMenu: NSMenu!

let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)

func applicationDidFinishLaunching(aNotification: NSNotification) {
    let icon = NSImage(named: "statusIcon")

    statusItem.image = icon
    statusItem.menu = statusMenu
    // Time for constant repeat
    NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timerRepeat", userInfo: nil, repeats: true)
}

// Method to call the tracking core
func timerRepeat() {
    //....
}

@IBAction func frontEnd(sender: NSMenuItem) {
    var targetURL : String = NSBundle.mainBundle().resourcePath!
    targetURL = targetURL + "/" + "front.app"
    let workspace = NSWorkspace()
    workspace.launchApplication(targetURL)
}


@IBAction func menuClicked(sender: NSMenuItem) {
    NSApplication.sharedApplication().terminate(self)
}   
}

3 个答案:

答案 0 :(得分:7)

您的xib文件中有一个损坏的插座。通常情况下,当您设置ivar或属性的出口时,后来删除或重命名不使用Xcode的重命名功能。

答案 1 :(得分:2)

还要确保将自定义视图或视图控制器类添加到目标。 (项目=> 目标名称 =>构建阶段=>编译源代码)。文件可能在您的项目中,但不在您的目标中。

答案 2 :(得分:0)

发生这种情况是因为您曾经为情节提要元素创建了@IBOutlet。然后,您稍后从快速文件中删除了代码(参考)。

我创建了一个示例,其中创建了两个额外的@IBOutlets(我将它们命名为'correctField'和'incorrectField'-两者都是不正确的),并将它们从情节提要板连接到我的swift文件。 然后,我从swift文件中删除了代码。这将生成日志,如下图所示: enter image description here

要删除这种日志消息,您可以执行以下操作:

  1. 转到“故事板”,然后选择从中创建连接(@IBOutlets)的故事板元素。
  2. 打开“连接检查器”,如下图所示
  3. 删除不正确的参考出口(在我的情况下是'correctField'和'incorrectField')
  4. 完成

这是在xCode 11中完成的

enter image description here