2012-01-26 38 views
28

Tôi có một phiên bản NSData chứa văn bản được phân bổ (NSAttributedString) có nguồn gốc từ một NSTextView. Tôi muốn chuyển đổi chuỗi được gán thành một chuỗi đơn giản (NSString) mà không có bất kỳ định dạng nào để thực hiện một số phân tích văn bản (tại thời điểm chuyển đổi, tôi không có quyền truy cập vào NSTextView gốc cũng như thể hiện NSTextStorage của nó).Biến NSAttributedString thành văn bản thuần túy

Cách tốt nhất để làm điều này là gì?

EDIT:

Ra khỏi tò mò tôi đã kiểm tra kết quả của:

[[[self textView] textStorage] words] 

đó dường như là một điều hữu ích để thực hiện một số phân tích văn bản. Mảng kết quả chứa các cá thể của NSSubTextStorage (ví dụ bên dưới chữ "Eastern"):

Eastern { NSFont = "\" LucidaGrande 11.00 pt. P [] (0x7ffcaae08330) fobj = 0x10a8472d0, spc = 3.48 \ ""; NSParagraphStyle = "Căn chỉnh 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\ n 28L, \ n 56L, \ n 84L, \ n 112L, \ n
140L, \ n 168L, \ n 196L, \ n 224L, \ n 252L, \ n 280L, \ n
308L, \ n 336L \ n), DefaultTabInterval 0, Blocks (null), Danh sách (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0.05, Tiêu đềLevel 0 "; }

NSSubTextStorage có lẽ là một lớp riêng tư vì tôi không thể tìm thấy bất kỳ tài liệu nào cho nó. Nó cũng giữ lại tất cả các định dạng.

Trả lời

53

Nếu tôi hiểu chính xác bạn có số NSData, hãy nói data, có chứa NSAttributedString được mã hóa. Để đảo ngược quá trình:

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

và để có được những văn bản đơn giản mà không thuộc tính sau đó bạn làm:

NSString *str = [nas string]; 
+7

Ôi ... Tôi phải đi ra ngoài cho một chút không khí trong lành. Cảm ơn câu trả lời! Không thể tin rằng tôi không thấy rằng bản thân mình ... [tự đá] – Roger

+1

Nếu một tập tin đính kèm hình ảnh tồn tại trong màn hình được phân bổ, tài sản chuỗi kết quả sẽ trả về một? ở nơi đó. Tôi đang cố gắng tìm giải pháp cho nó. Bạn có thể chia sẻ nếu bạn có bất kỳ ý tưởng nào không? – Avi

+0

@Avi - Những gì bạn có thể thấy là 'NSAttachmentCharacter' và nếu bạn chỉ đơn giản là có thể loại bỏ bất kỳ sự xuất hiện của nó. Nó được ghi thành một phần của 'NSTextAttachment'. – CRD

5

Đang cập nhật cho Swift 2.2/Swift 3:

attributedText.string 
0

Với Swift 4 và macOS 10.0+, NSAttributedString có thuộc tính được gọi là string. string có khai báo như sau:

var string: String { get } 

Nội dung đặc trưng của người nhận như một đối tượng NSString.

Apple cũng nói về string:

nhân vật đính kèm không được loại bỏ khỏi giá trị của tài sản này. [...]


Mã Sân chơi sau đây cho thấy làm thế nào để sử dụng NSAttributedString 's string tài sản để lấy nội dung chuỗi của một thể hiện 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 
Các vấn đề liên quan