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



我一直得到'编辑器占位符在源文件'错误。我试图访问我的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;

我做错了什么?

首先,如果你正在使用故事板或xib ,你不能有一个出口到NSTextView。解决方法是创建一个Outlet到包含NSScrollView的目标文本视图。所以要确保你引用了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 */ }

最新更新