Преобразуйте NSAttributedString в обычный текст - PullRequest
30 голосов
/ 26 января 2012

У меня есть экземпляр NSData, содержащий атрибутивный текст (NSAttributedString), происходящий из NSTextView.Я хочу преобразовать приписанную строку в простую строку (NSString) без какого-либо форматирования, чтобы выполнить какой-либо анализ текста (в момент преобразования у меня нет доступа ни к исходному NSTextView, ни к его экземпляру NSTextStorage).

Каков наилучший способ сделать это?

РЕДАКТИРОВАТЬ:

Из любопытства я рассмотрел результат:

[[[self textView] textStorage] words]

, которыйоказалось удобной вещью для анализа текста.Полученный массив содержит экземпляры NSSubTextStorage (пример ниже слова «восточный»):

восточный {NSFont = "\" LucidaGrande 11,00 pt.P [] (0x7ffcaae08330) fobj = 0x10a8472d0, spc = 3,48 \ "";NSParagraphStyle = "Выравнивание 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, вкладки (\ n 28L, \ n 56L, \ n 84)n 112L, \ n
140L, \ n 168L, \ n 196L, \ n 224L, \ n 252L, \ n 280L, \ n
308L, \ n 336L \ n), DefaultTabInterval 0, блоки (ноль)), Списки (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0.05, HeaderLevel 0 ";}

NSSubTextStorage, вероятно, является закрытым классом, поскольку я не смог найти для него никакой документации.Также сохраняется все форматирование.

Ответы [ 3 ]

60 голосов
/ 26 января 2012

Если я вас правильно понимаю, у вас есть NSData, скажем data, содержащий закодированный NSAttributedString. Чтобы отменить процесс:

NSAttributedString *nas = [[NSAttributedString alloc] initWithData:data
                                                           options:nil
                                                documentAttributes:NULL
                                                             error:NULL];

и чтобы получить простой текст без атрибутов, вы затем делаете:

NSString *str = [nas string];
9 голосов
/ 20 апреля 2016

Обновление для Swift 2.2 / Swift 3:

attributedText.string
3 голосов
/ 03 августа 2017

В Swift 5 и macOS 10.0+ NSAttributedString имеет свойство, называемое string. string имеет следующую декларацию:

var string: String { get }

Содержимое символов получателя в виде объекта NSString.

Apple также заявляет о string:

Символы вложения не удаляются из значения этого свойства. [...]


Следующий код Playground показывает, как использовать свойство NSAttributedString string для извлечения строкового содержимого экземпляра NSAttributedString:

import Cocoa

let string = "Some text"
let attributes = [NSAttributedString.Key.underlineStyle : NSUnderlineStyle.single]
let attributedString = NSAttributedString(string: string, attributes: attributes)

/* later */

let newString = attributedString.string
print(newString) // prints: "Some text"
print(type(of: newString)) // prints: String
...