簡體   English   中英

將NSTextView格式的文本轉換為NSData(並返回)

[英]Converting NSTextView formatted text to NSData (and back)

我應該如何將NSTextView的內容轉換為NSData ,然后將其轉換回來並在Mac OS X上顯示?

我可以將文本轉換,而不使用格式化textView.textStorage.string (其中的TextView是NSTextView對象)。 但是,我也想保存文本格式。

事實上,我已經實施了一種有效的方法,但我不確定它是否能保證始終有效。 我編碼NSTextStorage對象本身並編寫它,然后將其作為NSAttributedString讀回。 NSTextStorage是的子類NSAttributedString )。我這樣做是因為我不能直接設置textStorageNSTextView ,但我可以設置其屬性串。

這是我的代碼轉換它(結果是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM