3

我应该如何将 a 的内容转换NSTextViewNSData,然后在 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?

4

1 回答 1

2

是的,这会起作用。NSTextStorage将使用. NSCoding_ 这意味着即使您编写了一个可变对象,您也会将数据作为不可变对象读回。NSAttributedStringNSAttributedString

显然,如果您使用该setAttributedString:方法就可以了,因此您将使用编码的不可变数据来更新可变状态。只要您的序列化/反序列化代码正确,这应该可以完美运行。

于 2012-06-25T05:14:15.530 回答