Проблема с неправильным NSRange выделенного текста в NSTextView в функции под управлением NSText.didChangeNotification - PullRequest
1 голос
/ 27 января 2020

Мне нужно использовать длину NSRange последнего выделения в тексте (в NSTextView) до изменения текста. Для этого я использую Уведомления следующим образом:

override func viewDidLoad()
{
    NotificationCenter.default.addObserver(self, selector: #selector(self.textIsChanged(_:)), name:NSText.didChangeNotification, object: myTextView)
    NotificationCenter.default.addObserver(self, selector: #selector(self.textWillBeChanged(_:)), name:NSText.didBeginEditingNotification, object: myTextView)
} 


var lengthOfSelection = Int()

@objc func textWillBeChanged(_ notification: Notification)
{
    lengthOfSelection = myTextView.selectedRange().length
}


@objc func textIsChanged(_ notification: Notification)
{
    lengthOfSelection //this variable is used here
}

Проблема заключается в том, что при выделении и удалении текста значение lengthOfSelection не на 100% правильно в функции textIsChanged. Т.е. иногда он равен нулю, тогда как выделение удаленного текста не было нулевым до того, как текст изменился, и lengthOfSelection не должно быть равным нулю.

Обновление.

I узнал, откуда я получаю неожиданный ноль. Это тот случай, когда:

текст из Pasteboard вставляется в позицию (с нулевой длиной выделения), а затем, когда я удаляю где-то выделенную часть текста, я получаю NSRange позиции, где предыдущий вставка была вставлена. Так что на самом деле это не последний выбор, а один перед последним.

Теперь вопрос, почему? Как это может быть ? И что я могу сделать, чтобы действительно получить NSRange последнего выбранного текста?

...