7

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 です。それを行う方法はありますか?

4

1 に答える 1

11

次のような既存のものから入力文字列を作成したと言いましたNSAttributedString

[NSString stringWithFormat:@"%@", nsattributedstring]

%@フォーマット指定子は、メッセージdescriptionnsattributedstringオブジェクトに送信します。このメソッドは、オブジェクトdescriptionに簡単に変換できる文字列を生成するようには設計されていません。NSAttributedStringプログラマーがコードをデバッグできるように設計されています。

後でオブジェクトに変換できるように、オブジェクトを文字列またはバイト配列に変換するプロセスは、シリアライゼーションと呼ばれます。%@またはdescriptionメソッドを使用することは、通常、シリアル化を実行するための適切な方法ではありません。メソッドによって作成された文字列を逆シリアル化したい場合はdescription、独自のパーサーを作成する必要があります。私の知る限り、そのための API はありません。

代わりに、Cocoa は、オブジェクトをシリアライズおよびデシリアライズするように設計されたシステムを提供します。このシステムを使用してシリアル化できるオブジェクトは、NSCodingプロトコルに準拠しています。NSAttributedStringオブジェクトは に準拠していNSCodingます。したがって、元の属性付き文字列を次のようにシリアライズしてみてください。

NSMutableData *data = [NSKeyedArchiver archivedDataWithRootObject:nsattributedstring];

必要な場所に保存dataします (UTF-8 ではなく、人間が判読できないバイナリです)。属性付き文字列を再作成する必要がある場合は、次のようにします。

NSAttributedString *fancyText = [NSKeyedUnarchiver unarchiveObjectWithData:data];

OS X ( iOS ではない) 用にプログラミングしている場合は、別の方法があります。RTFFromRange:documentAttributes:メソッド(添付ファイルを省略) またはRTFDFromRange:documentAttributes:メソッド(添付ファイルを含む)を使用して、属性付き文字列を RTF (リッチ テキスト形式) に変換できます。次に、initWithRTF:documentAttributes:またはを使用して、RTF データを属性付きの文字列に戻すことができますinitWithRTFD:documentAttributes:。これらのメソッドは iOS では使用できません。

iOS 7.0 以降用にプログラミングしている場合は-dataFromRange:documentAttributes:error:、またはfileWrapperFromRange:documentAttributes:error:を使用して属性付き文字列を RTF/RTFD に変換できます。ドキュメント属性に、またはドキュメント属性に設定する必要がありNSDocumentTypeDocumentAttributeます。またはを使用して に戻します。これらのメソッドはNSAttributedString UIKit Additionsの一部です。NSRTFTextDocumentTypeNSRTFDTextDocumentTypeinitWithData:options:documentAttributes:error:initWithFileURL:options:documentAttributes:error:NSAttributedString

于 2013-05-03T18:24:14.357 に答える