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;

Что я делаю неправильно?

1 ответ

Решение

Во-первых, если вы используете раскадровки или XIBS, вы не можете иметь выход на NSTextView, Обходной путь должен создать Outlet к целевому текстовому представлению, содержащему NSScrollView, Поэтому убедитесь, что вы храните ссылки на instructionField как таковой, и он содержит вид прокрутки как таковой:

@IBOutlet weak var scrollView : NSScrollView!

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

Далее вы не получаете доступ к тексту, содержащемуся в текстовом представлении, с помощью textStorage, Правильная реализация для получения текста, содержащегося в instructionField как следует:

instructionField.string

который имеет тип String?,


Теперь, если вы хотите получить NSAttributedString от instructionFieldВы можете сделать это так, чтобы избежать принудительного развертывания необязательного:

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

в заключение

Окончательное исправление вашей проблемной строки может выглядеть примерно так:

guard let Instruct = instructionField.string else { /* else */ }
Другие вопросы по тегам