gpt4 book ai didi

objective-c - 将 NSTextView 格式的文本转换为 NSData(并返回)

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:00 24 4
gpt4 key购买 nike

在 Mac OS X 上,我应该如何将 NSTextView 的内容转换为 NSData,然后再将其转换回来并显示?

我可以使用 textView.textStorage.string(其中 textView 是 NSTextView 对象)转换文本而无需格式化。但是,我也想保存文本格式。

事实上,我已经实现了一种可行的方法,但我不确定它能否保证始终有效。我对 NSTextStorage 对象本身进行编码并写入,然后将其作为 NSAttributedString 读回。 (NSTextStorageNSAttributedString 的子类。)我这样做是因为我不能直接为 NSTextView 设置 textStorage,但我可以设置它的属性字符串。

这是我转换它的代码(结果在 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 将使用 NSAttributedStringNSCoding 实现,因此当您对数据进行编码时,您实际上是在编码一个 NSAttributedString。这意味着您将把数据作为不可变对象(immutable对象)读回,即使您编写了一个可变对象。

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

关于objective-c - 将 NSTextView 格式的文本转换为 NSData(并返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com