2012-01-26 4 views
28

Mam instancję NSData zawierającą przypisany tekst (NSAttributedString) pochodzący z NSTextView. Chcę przekonwertować przypisany ciąg na zwykły ciąg znaków (NSString) bez formatowania do analizy tekstu (w momencie konwersji nie mam dostępu do wyjściowego NSTextView ani jego instancji NSTextStorage).Przekształcanie NSAttributedString w zwykły tekst

Jaki byłby najlepszy sposób na zrobienie tego?

EDIT:

Z ciekawości Zbadałem wynik:

[[[self textView] textStorage] words] 

która okazała się przydatna rzecz dla jakiejś analizy tekstu. Otrzymany tablica zawiera przypadki NSSubTextStorage (przykład poniżej słowa „Wschodniej”)

Wschodniej { NSFont = „\” LucidaGrande 11,00 pkt. P [] (0x7ffcaae08330) fobj = 0x10a8472d0, spc = 3,48 \ ""; NSParagraphStyle = "Wyrównanie 0, Odstęp między wierszami 0, Odczytanie akapitów 0, Akapit akapitowy Przed 0, Nagłówek 0, OgonIndent 0, FirstLineHeadIndent 0, Szerokość liniowa 0/0, Wysokość liniowa Wielokrotność 0, LineBreakMode 0, Tabulatory (\ n 28L, \ n 56L, \ n 84L, \ n 112L, \ n 192L, \ n 224L, \ n 252L, \ n 280L, \ n
308L, \ n 336L \ n), DefaultTabInterval 0, Blocks (null), list (null), BaseWritingDirection -1, dzielnik dzielenia 0, współczynnik skrętu 0,05, Element nagłówka 0 "; }

NSSubTextStorage to prawdopodobnie prywatna klasa, ponieważ nie mogłem znaleźć dla niej żadnej dokumentacji. Zachowuje również wszystkie formatowanie.

Odpowiedz

53

Jeśli dobrze rozumiem, masz NSData, powiedzmy data, zawierający kodowany NSAttributedString. Aby odwrócić proces:

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

i uzyskać zwykły tekst bez atrybutów wtedy zrobić:

NSString *str = [nas string]; 
+7

Oh my ... muszę wyjść za odrobinę świeżego powietrza. Dziękuję za odpowiedź! Nie mogę uwierzyć, że sam tego nie widziałem ... [self kick] – Roger

+1

Jeśli na przypisanym ekranie istnieje załącznik obrazu, wynikowa właściwość łańcucha zwróci wartość? w miejscu tego zajęcia. Próbuję znaleźć dla niego rozwiązanie. Czy możesz dzielić się, jeśli masz jakiś pomysł? – Avi

+0

@Avi - To, co prawdopodobnie widzisz, to 'NSAttachmentCharacter', a jeśli tak, to po prostu usuń wszelkie jego wystąpienia. Jest to dokumentowane jako część 'NSTextAttachment'. – CRD

5

Aktualizacja dla Swift 2.2/Swift 3:

attributedText.string 
0

szybkimi 4 i macOS 10.0+, NSAttributedString ma właściwość o nazwie string. string ma następującą deklarację:

var string: String { get } 

zawartość charakteru odbiornika jako obiekt NSString.

Jabłko stwierdza również o string:

znaków załącznik nie są usuwane z wartości tej nieruchomości. [...]


Poniższy kod zabaw pokazuje, jak używać NSAttributedString „s string nieruchomość w celu pobrania zawartości ciąg instancji NSAttributedString:

import Cocoa 

let string = "Some text" 
let attributes = [NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue] 
let attributedString = NSAttributedString(string: string, attributes: attributes) 

/* later */ 

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