OSX Swift: NSTextView 源文件中的编辑器占位符错误

OSX Swift: Editor placeholder in sourcefile error on NSTextView

我一直收到 'Editor placeholder in sourcefile' 错误。我正在尝试访问我的 NSTextView 的文本,但我似乎没有做对。

@IBAction func cancelButton(sender: AnyObject) {

    dismissViewController(self)
}

@IBAction func saveButtonHandler(sender: AnyObject) {

    let Name: String! = nameField.stringValue;
    let Time: String! = timeField.stringValue;
    let Yum: String! = yumField.stringValue;
    let Instruct = (instructionField.textStorage as NSAttributedString!).string;
    let recipe = Recipe(name: Name, time: Time, yum: Yum, type: foodType, instructions: Instruct)

    dismissViewController(self)
}

问题出在行

    let Instruct = (instructionField.textStorage as NSAttributedString!).string;

我做错了什么?

首先,如果您使用 Storyboards 或 xibs,您不能有 NSTextView 的 Outlet。解决方法是为包含 NSScrollView 的目标文本视图创建一个 Outlet。因此,请确保您保留对 instructionField 的引用,并且它包含滚动视图:

@IBOutlet weak var scrollView : NSScrollView!

var instructionField : NSTextView {
    get {
        return scrollView.contentView.documentView as! NSTextView
    }
}

接下来,您不会使用 textStorage 访问包含在文本视图中的文本。获取instructionField中包含的文本的正确实现如下:

instructionField.string

属于 String?.

类型

现在,如果你想从 instructionField 得到一个 NSAttributedString,你可以这样做以避免强行解包一个可选的:

guard let str = instructionField.string else { /* else */ }
guard let attrStr = str as? NSAttributedString else { /* else */ }

终于

问题行的最终修复可能如下所示:

guard let Instruct = instructionField.string else { /* else */ }