我试图构建一个示例 Cocoa 应用程序,我想在该应用程序上将 Storyboard上的 UI 组件连接到 ViewController.swift
作为 IBOutlet
或 IBAction
。但是,当我尝试控制拖动 Storyboard上的 UI 组件(例如 NSButton
)到 ViewController.swift
并创建一个 @IBAction
方法时,然后运行应用程序,生成的应用程序在控制台中记录以下消息,当然应用程序不会响应我点击按钮。
Failed to connect (storyboard) outlet from (NSApplication) to (NSNibExternalObjectPlaceholder): missing setter or instance variable
如何正确使用IBAction
方法?
关于您的信息,这是我的 ViewController.swift
:
import Cocoa
class ViewController: NSViewController {
@IBOutlet var txtTitle : NSTextField
@IBOutlet var boxColor : NSBox
override func viewDidLoad() {
super.viewDidLoad()
}
func colorChanged(cp: NSColorPanel) {
let c:NSColor = cp.color;
self.boxColor.fillColor = c
}
@IBAction func btnSetColor(sender : AnyObject) {
let cp:NSColorPanel = NSColorPanel.sharedColorPanel()
cp.setTarget(self)
cp.setAction("colorChanged:")
cp.orderFront(nil)
}
@IBAction func btnSetWindowTitle(sender : AnyObject) {
if self.txtTitle.stringValue != "" {
println(self.title)
println(self.txtTitle.stringValue)
self.title = self.txtTitle.stringValue
}
}
}
我在 OS X 10.10 Yosemite 上使用 Xcode 6 beta。并在 Storyboard打开的情况下启动模板。
最佳答案
虽然上面的答案正确地指出这不是编译问题的原因,但我想我会为那些只想完全消除警告消息的人澄清一下。当我找到这个页面时,这就是我要找的东西。
当您构建 Action 并且某些 Action 发生变化或在 Storyboard 中被删除时,导出仍然存在。选择以前未使用的旧操作所在的 Controller /窗口,您仍会在属性选项卡中 Storyboard 的 outlets
部分中看到它们。删除那些旧的操作/导出,然后警告消失。
查找 ViewController 和文件所有者之间的重复项。一个或两个可能在不应该持有这些对象时持有这些对象。删除这些将删除这些软警告。
关于xcode - 无法将( Storyboard) socket 从(NSApplication)连接到 Cocoa 和 Storyboard中的(NSNibExternalObjectPlaceholder)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229344/