Какао: NSTextStorageDelegate имеет устаревший NSLayoutManager?
Я работаю с NSTextView и имею делегат установлен для его -textStorage
имущество. При получении -textStorageDidProcessEditing:
Мне нужно применить атрибуты к частям текста.
Мои атрибуты применяются, но они всегда применяются к тексту до того, как я произвожу редактирование, даже если я вызываю методы NSLayoutManager, а не из -will...
но did...
,
Как будто менеджер компоновки не знает о недавней вставке / удалении глифа на данном этапе выполнения, поэтому я предполагаю, что NSTextView/NSTextStorage вызывает метод делегата, а затем уведомляет диспетчер компоновки об обновлении.
Есть ли способ заставить диспетчер макета обновиться с немедленным эффектом, чтобы я мог заставить это работать?
Я в курсе NSTextStorage
"s -addAttribute:value:range:
метод (ы) и успешно использовали их до этого момента, но я попал в точку, где мне нужно теперь сделать это с помощью менеджера макета вместо того, чтобы выполнять упражнение по рефакторингу / оптимизации.
1 ответ
Я нашел решение этой проблемы. Если вы зарегистрируетесь в качестве делегата для обоих NSTextStorage -textStorageDidProcessEditing:
и NSLayoutManager's -didInvalidateLayout:
уведомлений, тогда вы можете эффективно "поставить в очередь" операцию из делегата хранения текста, которая будет выполняться только после того, как делегат менеджера макета получит уведомление о том, что это безопасно сделать.