如何将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
?
答案 0 :(得分:2)
是的,这会有效。 NSTextStorage
将使用NSCoding
的{{1}}实现,因此在对数据进行编码时,您实际上将对NSAttributedString
进行编码。这意味着即使您编写了一个可变对象,也会将数据作为不可变对象读回。
显然,如果你使用NSAttributedString
方法,这很好,所以你将使用编码的不可变数据来更新可变状态。只要你的序列化/反序列化代码是正确的,这应该完美无缺。