我已经尝试构建一个示例Cocoa应用程序,我想将故事板上的UI组件连接到ViewController.swift
一个IBOutlet
或者IBAction
.但是,当我尝试控制 - 拖动故事板(例如NSButton
)上的UI组件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.并启动了故事板的模板.
虽然上面的答案正确地指出这不是编译问题的原因,但我认为我会澄清那些只想完全消除警告信息的人.当我找到这个页面时,这就是我所寻找的.
当您构建操作并且某些操作发生更改或在故事板中被删除时,网点仍然存在.选择以前使用较旧的未使用操作的控制器/窗口,您仍将outlets
在属性选项卡中的故事板段中看到它们.删除那些旧的操作/出口,然后警告消失.
查找ViewController和文件所有者之间的重复项.当它们不应该存在时,其中一个或两个可能会坚持这些对象.删除这些将删除这些软警告.
Failed to connect (storyboard) outlet from (NSApplication) to (NSNibExternalObjectPlaceholder): missing setter or instance variable
IBAction方法应该像它一样工作,请参阅Apple Dev论坛:
"这是一个已知问题......这些消息是无害的,并不 表示您的代码存在问题."
Apple Dev论坛:OS X Storyboard失败
这不是你的代码无法正常工作的原因,你需要修复以下内容:
A)这是我工作的代码设置标题-使用self.view.window.title代替self.title:
@IBAction func btnSetWindowTitle(sender : AnyObject) { if self.txtTitle.stringValue != "" { println(self.view.window.title) println(self.txtTitle.stringValue) self.view.window.title = self.txtTitle.stringValue } }
B)在Interface Builder中,您需要将NSBox"Box Type"设置为"Custom":
就是这样: