[英]Converting NSTextView formatted text to NSData (and back)
我應該如何將NSTextView
的內容轉換為NSData
,然后將其轉換回來並在Mac OS X上顯示?
我可以將文本轉換,而不使用格式化textView.textStorage.string
(其中的TextView是NSTextView
對象)。 但是,我也想保存文本格式。
事實上,我已經實施了一種有效的方法,但我不確定它是否能保證始終有效。 我編碼NSTextStorage
對象本身並編寫它,然后將其作為NSAttributedString
讀回。 ( NSTextStorage
是的子類NSAttributedString
)。我這樣做是因為我不能直接設置textStorage
為NSTextView
,但我可以設置其屬性串。
這是我的代碼轉換它(結果是在data
):
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:textView.textStorage forKey:@"attrs"];
[archiver finishEncoding];
讀回來:
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSAttributedString* theAttrString = [unarchiver decodeObjectForKey:@"attrs"];
[unarchiver finishDecoding];
並顯示它:
[textView.textStorage setAttributedString:theAttrString];
這種方法是否可以保證工作,因為我編碼了一個NSTextStorage
對象並將其讀回來將其解釋為NSAttributedString
?
是的,這會奏效。 NSTextStorage
將使用NSCoding
實施NSAttributedString
,所以當你的數據進行編碼,您實際上是編碼NSAttributedString
。 這意味着即使您編寫了一個可變對象,您也會將數據作為不可變對象讀回。
顯然,如果你使用setAttributedString:
方法,這很好,所以你將使用編碼的不可變數據來更新可變狀態。 只要序列化/反序列化代碼正確,這應該完美無缺。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.