2013-05-03 12 views
6

NSString var ve NSAttributedString yapmam gerekiyor.NSAttributedString öğesini dize ve geri dönüştür

NSString gibi bir şey:

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"; 
} 

O NSAttributedString UTF-8 içinde. Bunu yapmanın bir yolu var mı?

+0

NSAttributedString * attrStr = [[NSAttributedString alloc] initWithString: @ "foo"]; '? –

+0

Hayır, biçimlendirilmiş nsattributestring'e ihtiyacım var. İlgi için teşekkürler. –

+0

Daha sonra, 'NSMutableAttributedString' özelliğini kullanabilir ve istediğiniz gibi nitelikler ekleyebilirsiniz. –

cevap

8

Sen böyle varolan NSAttributedString adresinin giriş dizesi oluşturulan söyledi:

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

%@ biçim belirteci nsattributedstring nesneye description mesajı gönderir. description yöntemi, NSAttributedString nesnesine kolayca dönüştürülebilen bir dize oluşturmak için tasarlanmamıştır. Programcıların kodlarını ayıklamalarına yardımcı olmak için tasarlanmıştır.

Bir nesneyi bir dizeye veya daha sonra bir nesneye dönüştürülebilmesi için bir dizge veya bir diziye dönüştürme işlemi, serileştirme olarak adlandırılır. %@ veya description yöntemini kullanmak, genellikle serileştirme işlemini gerçekleştirmenin iyi bir yolu değildir. description yöntemiyle oluşturulan dizgeyi gerçekten kaldırmak istiyorsanız, kendi çözümleyicinizi yazmanız gerekir. Bildiğim kadarıyla bunun için bir API yok. Cocoa, nesneleri serileştirmek ve serileştirmek için tasarlanmış bir sistem sağlar. Bu sistem kullanılarak serileştirilebilen nesneler, NSCoding protokolüne uygundur. NSAttributedString nesneleri, NSCoding'a uygundur. Yani orijinal atfedilen dize bu şekilde seri hale deneyin:

NSMutableData *data = [NSKeyedArchiver archivedDataWithRootObject:nsattributedstring]; 

size gereken yere (insan dışı okunabilir ikili değil, UTF-8) Kaydet data. Eğer atfedilen dizeyi yeniden gerektiğinde, bunu:

NSAttributedString *fancyText = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

Eğer OS X (değil iOS) için programlama yapıyorsanız, bir alternatif var. Öznitelikli bir dize, RTFFromRange:documentAttributes: method (ekleri atar) veya RTFDFromRange:documentAttributes: method (ekleri içeren) kullanarak, oldukça insan tarafından okunabilen RTF'ye (zengin metin biçimi) dönüştürebilirsiniz. Ardından, RTF verilerini initWithRTF:documentAttributes: veya initWithRTFD:documentAttributes: kullanarak atıfta bulunulan bir dizeye dönüştürebilirsiniz. Bu yöntemler iOS'ta mevcut değildir.

iOS 7.0 için programlama yapıyorsanız ya da geç, RTF/RTFD atfedilen dizeyi dönüştürmek için -dataFromRange:documentAttributes:error: veya fileWrapperFromRange:documentAttributes:error: kullanabilirsiniz. Belge özniteliklerinde NSDocumentTypeDocumentAttribute değerini NSRTFTextDocumentType veya NSRTFDTextDocumentType olarak ayarlamanız gerekir. Bir NSAttributedString'a dönüştürmek için initWithData:options:documentAttributes:error: veya initWithFileURL:options:documentAttributes:error: kullanın. Bu yöntemler, NSAttributedString UIKit Additions'un bir parçasıdır.

+0

: [1] [1] [link burada açıklama girin] Cevap için teşekkürler. NSCoding hakkında biliyorum, ancak UTF-8 xml dosyasına yazdığım için NSAttributedString UTF-8'i almam gerekiyor. Bunu yapmanın bir yolu var mı? –

+1

@ MichalJuriJurník: “NSAttributedString UTF-8” diye bir şey yoktur. NSAttributedString, bir dize artı özniteliğidir; Herhangi bir dizeyi UTF-8 verileri olarak kodlayabilirsiniz, ancak yine de öznitelikleri ayrı ayrı serileştirmeniz ve daha sonra bunları hem deserialize/deşifre etmeniz ve diğer uçta tekrar bir araya getirmeniz gerekir. RTF yöntemlerini kullanın; Bunun için tasarlandılar. –

+0

İyi fikir için Thx;) –

İlgili konular