2013-05-03 6 views
6

NSStringがあり、NSAttributedStringを作成する必要があります。NSAttributedStringを文字列に変換して戻す

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ています:

NSStringのようなものです。それを行う方法はありますか?

+0

あなたは 'NSAttributedString * attrStr = [[NSAttributedString alloc] initWithString:@" foo "];'を探していますか? –

+0

いいえ、私はフォーマットされたnsattributestringが必要です。興味のあるThx。 –

+0

次に、 'NSMutableAttributedString'を使用して、どんな種類の属性を追加してもかまいません。 –

答えて

8

あなたは、このような既存のNSAttributedStringからあなたの入力文字列を作成し、言った:

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

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

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

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

NSMutableData *data = [NSKeyedArchiver archivedDataWithRootObject:nsattributedstring]; 

必要にどこ(非人間が読める形式のバイナリではなく、UTF-8である)保存data。あなたが起因した文字列を再作成する必要がある場合は、次の操作を行います。

NSAttributedString *fancyText = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

あなたはOSのXない iOS版)のためにプログラミングされている場合は、代替手段を持っています。帰属文字列は、RTFFromRange:documentAttributes: method(添付ファイルを省略)またはRTFDFromRange:documentAttributes: method(添付ファイルを含む)を使用して、人間が判読可能なRTF(リッチテキスト形式)にすることができます。その後、initWithRTF:documentAttributes:またはinitWithRTFD:documentAttributes:を使用して、RTFデータを属性付き文字列に戻すことができます。これらのメソッドはiOSでは使用できません。あなたはiOSの7.0以降のためにプログラミングされている場合

、あなたはRTF/RTFDに起因する文字列を変換するために-dataFromRange:documentAttributes:error:fileWrapperFromRange:documentAttributes:error:を使用することができます。文書の属性でNSDocumentTypeDocumentAttributeNSRTFTextDocumentTypeまたはNSRTFDTextDocumentTypeに設定する必要があります。 initWithData:options:documentAttributes:error:またはinitWithFileURL:options:documentAttributes:error:を使用して、NSAttributedStringに変換し直してください。これらのメソッドはNSAttributedString UIKit Additionsの一部です。

+0

返信用のThx。私はNSCodingについて知っていますが、文字列をUTF-8 xmlファイルに書き込むため、NSAttributedStringのUTF-8を取得する必要があります。それを行う方法はありますか? –

+1

@MichalJuriJurník:「NSAttributedStringのUTF-8」のようなものはありません。 NSAttributedStringは文字列+属性です。任意の文字列をUTF-8データとしてエンコードすることはできますが、属性を別々にシリアル化してから両方をデシリアライズ/デコードし、もう一方の端に戻す必要があります。 RTFメソッドを使用します。彼らはこれのために設計されています。 –

+0

Thumb for good idea;) –

関連する問題