无法在Cocoa和故事板中连接(故事板)插座(NSApplication)到(NSNibExternalObjectPlaceholder)错误

 图片哪天能显示 发布于 2023-01-09 10:58

我已经尝试构建一个示例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.并启动了故事板的模板.

2 个回答
  • 虽然上面的答案正确地指出这不是编译问题的原因,但我认为我会澄清那些只想完全消除警告信息的人.当我找到这个页面时,这就是我所寻找的.

    当您构建操作并且某些操作发生更改或在故事板中被删除时,网点仍然存在.选择以前使用较旧的未使用操作的控制器/窗口,您仍将outlets在属性选项卡中的故事板段中看到它们.删除那些旧的操作/出口,然后警告消失.

    查找ViewController和文件所有者之间的重复项.当它们不应该存在时,其中一个或两个可能会坚持这些对象.删除这些将删除这些软警告.

    2023-01-09 11:01 回答
  • 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": 在此输入图像描述

    就是这样: 在此输入图像描述

    2023-01-09 11:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有