objective-c – 将NSAttributedString转换为字符串并返回

我有Nsstring,我需要制作NSAttributedString.

Nsstring是这样的:

bvcx b vcxbcvx bcxvbcxv bvx xbc bcvx bxcv bcxv bcxv bcxv bcvx bcvx bcxvbcvx bvc bcvx bxcv{
NSFont = "\"LucidaGrande 24.00 pt. P [] (0x108768a80) fobj=0x108788880,spc=7.59\"";
NSParagraphStyle = "Alignment 4,Linespacing 0,ParagraphSpacing 0,ParagraphSpacingBefore 0,Headindent 0,TailIndent 0,FirstLineHeadindent 0,LineHeight 0/0,LineHeightMultiple 0,LineBreakMode 0,Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n),DefaultTabInterval 0,Blocks (null),Lists (null),BaseWritingDirection -1,HyphenationFactor 0,TighteningFactor 0.05,HeaderLevel 0";
}

它是UTF-8中的NSAttributedString.有什么方法可以做到吗?

解决方法

你说你从现有的NSAttributedString创建输入字符串,如下所示:
[Nsstring stringWithFormat:@"%@",nsattributedstring]

%@格式说明符将描述消息发送到nsattributedstring对象.描述方法的目的不是生成一个可以轻松转换回NSAttributedString对象的字符串.它旨在帮助程序员调试他们的代码.

将对象转换为字符串或字节数组以便以后可以将其转换回对象的过程称为序列化.使用%@或描述方法通常不是执行序列化的好方法.如果您确实要反序列化描述方法创建的字符串,则必须编写自己的解析器.据我所知,没有API.

相反,Cocoa提供了一个用于序列化和反序列化对象的系统.可以使用此系统序列化的对象符合NSCoding协议. NSAttributedString对象符合NSCoding.因此,请尝试以这种方式序列化原始属性字符串:

NSMutableData *data = [NSKeyedArchiver archivedDataWithRootObject:nsattributedstring];

在您需要的地方保存数据(非人类可读的二进制文件,而不是UTF-8).当您需要重新创建属性字符串时,请执行以下操作:

NSAttributedString *fancyText = [NSKeyedUnarchiver unarchiveObjectWithData:data];

如果您正在为OS X(而不是iOS)编程,那么您有另一种选择.您可以使用RTFFromRange:documentAttributes: method(省略附件)或RTFDFromRange:documentAttributes: method(包括附件)将属性字符串转换为RTF(富文本格式),这是人类可读的.然后,您可以使用initWithRTF将RTF数据转换回属性字符串:documentAttributes:或initWithRTFD:documentAttributes:.这些方法在iOS上不可用.

如果您使用的是iOS 7.0或更高版本的编程,则可以使用-dataFromrange:documentAttributes:error:或fileWrapperFromrange:documentAttributes:error:将属性字符串转换为RTF / RTFD.您需要在文档属性中将NSDocumentTypeDocumentAttribute设置为NSRTFTextDocumentType或NSRTFDTextDocumentType.使用initWithData:options:documentAttributes:error:或initWithFileURL:options:documentAttributes:error:转换回NSAttributedString.这些方法NSAttributedString UIKit Additions的一部分.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...