Какао: NSTextStorageDelegate имеет устаревший NSLayoutManager? - PullRequest
1 голос
/ 31 октября 2010

Я работаю с NSTextView, и для его свойства -textStorage установлен делегат.После получения -textStorageDidProcessEditing: мне нужно применить атрибуты к частям текста.

Мои атрибуты применяются, но они всегда применяются к тексту до Я сделал редактирование, дажехотя я вызываю методы NSLayoutManager не из -will..., а из did....

Это как если бы менеджер компоновки не знал о недавней вставке / удалении глифа на данном этапе выполнения, поэтому я предполагаю NSTextView /NSTextStorage вызывает метод делегата , а затем уведомляет менеджер макета об обновлении.

Есть ли способ заставить диспетчер макета выполнить обновление с немедленным эффектом, чтобы я мог заставить его работать?

Мне известны методы -addAttribute:value:range: NSTextStorage, и я успешно использовал их до этого момента, но я достиг точки, когда мне нужно сделать это через макетменеджер вместо этого в рамках упражнения по рефакторингу / оптимизации.

1 Ответ

1 голос
/ 02 ноября 2010

Я нашел решение этой проблемы. Если вы зарегистрируетесь как делегат для уведомлений -textStorageDidProcessEditing: и NSTextStorage -didInvalidateLayout: и NSLayoutManager, то вы сможете эффективно "поставить в очередь" операцию из делегата текстового хранилища, которая будет выполняться только после того, как делегат менеджера компоновки получит уведомление, которое безопасно делать поэтому.

...