我遇到一个问题,即使我的NSTextField IBOutlets连接到情节提要板,它们也显示为nil。在下面的简化示例中,我有一个按钮,当按下该按钮时,应列出3个文本标签的字符串值。

这是按钮的代码:

import Foundation
import Cocoa

class ViewController: NSObject{

    @IBAction func pushButton(sender: AnyObject) {
        let oneText = Texts()
        oneText.listTextFields()
    }

}


这是NSTextField列表的代码:

import Foundation
import Cocoa

class Texts: NSObject{

    @IBOutlet weak var l1: NSTextField!
    @IBOutlet weak var l2: NSTextField!

    @IBOutlet weak var l3: NSTextField!

    var textArray = [NSTextField]()

    func listTextFields (){
      self.textArray = [self.l1,self.l2,self.l3]

        for var i = 0; i < textArray.count; i++ {
            let text = textArray[i]
            print(text.stringValue)
        }
    }
}


我已经验证了IBOutlets都已连接,但是在运行程序并按下按钮时,出现“致命错误:在展开可选值时意外发现nil”消息。查看调试器,看起来树NSTextfields为“ nil”。

我究竟做错了什么?

最佳答案

您不是从情节提要中加载Texts,所以它对您的销售渠道一无所知。 Texts()创建该对象的新实例,然后在其上调用该方法。

您可能在界面生成器中的某个地方已有一个Texts对象,ViewController应该对此有一个出口。

关于swift - 引用IBOutlets时的零值-swift, cocoa ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34020856/

10-10 12:29