2013-05-03 6 views
6

पर एनएसएट्रिब्यूटेड स्ट्रिंग को कनवर्ट करें मेरे पास एनएसएसटींग है और मुझे एनएसएट्रिब्यूटेड स्ट्रिंग बनाने की आवश्यकता है।स्ट्रिंग और वापस

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

यह NSAttributedString UTF-8 में है। क्या ऐसा करने का कोई तरीका है?

+0

क्या आप 'NSAttributedString * attrStr = [[NSAttributedString alloc] initWithString: @" foo "];'? –

+0

नहीं, मुझे स्वरूपित nsattributestring की आवश्यकता है। ब्याज के लिए Thx। –

+0

फिर आप 'NSMutableAttributedString' का उपयोग कर सकते हैं और जो भी प्रकार के विशेषताओं को जोड़ना चाहते हैं उन्हें जोड़ सकते हैं। –

उत्तर

8

आपने कहा कि आप इस तरह एक मौजूदा NSAttributedString से अपने इनपुट स्ट्रिंग बनाया:

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

%@ फॉर्मेट स्पेसिफायर nsattributedstring वस्तु को description संदेश भेजता है। description विधि को एक स्ट्रिंग बनाने के लिए डिज़ाइन नहीं किया गया है जिसे आसानी से NSAttributedString ऑब्जेक्ट में परिवर्तित किया जा सकता है। यह प्रोग्रामर को उनके कोड को डीबग करने में मदद करने के लिए डिज़ाइन किया गया है।

किसी ऑब्जेक्ट को स्ट्रिंग या बाइट्स की सरणी में परिवर्तित करने की प्रक्रिया, ताकि इसे बाद में किसी ऑब्जेक्ट में परिवर्तित किया जा सके, जिसे क्रमबद्धता कहा जाता है। %@ या description विधि का उपयोग आमतौर पर क्रमबद्ध करने का एक अच्छा तरीका नहीं है। यदि आप वास्तव में description विधि द्वारा बनाई गई स्ट्रिंग को deserialize करना चाहते हैं, तो आपको अपना खुद का पार्सर लिखना होगा। जहां तक ​​मुझे पता है, उसके लिए कोई एपीआई नहीं है।

इसके बजाय, कोको वस्तुओं को क्रमबद्ध करने और deserialize करने के लिए डिज़ाइन की गई एक प्रणाली प्रदान करता है। ऑब्जेक्ट्स जिन्हें इस सिस्टम का उपयोग करके क्रमबद्ध किया जा सकता है NSCoding प्रोटोकॉल के अनुरूप है। NSAttributedString वस्तुओं NSCoding के अनुरूप है। तो अपने मूल जिम्मेदार ठहराया स्ट्रिंग इस तरह serializing कोशिश:

NSMutableData *data = [NSKeyedArchiver archivedDataWithRootObject:nsattributedstring]; 

सहेजें data भी आप की जरूरत है (जो गैर मानव पठनीय द्विआधारी, नहीं UTF-8 है)। जब आप जिम्मेदार ठहराया स्ट्रिंग से बनाना होगा, ऐसा करते हैं:

NSAttributedString *fancyText = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

आप ओएस एक्स (नहीं आईओएस) के लिए प्रोग्रामिंग रहे हैं, तो आप एक विकल्प है। आप एक जिम्मेदार स्ट्रिंग को आरटीएफ (समृद्ध टेक्स्ट प्रारूप) में बदल सकते हैं, जो RTFFromRange:documentAttributes: method (जो संलग्नक को छोड़ देता है) या RTFDFromRange:documentAttributes: method (जिसमें अनुलग्नक शामिल हैं) का उपयोग करके काफी मानव-पठनीय है। फिर आप आरटीएफ डेटा को initWithRTF:documentAttributes: या initWithRTFD:documentAttributes: का उपयोग करके एक जिम्मेदार स्ट्रिंग में वापस कर सकते हैं। ये विधियां आईओएस पर उपलब्ध नहीं हैं।

आप आईओएस 7.0 के लिए प्रोग्रामिंग रहे हैं या बाद में, आप -dataFromRange:documentAttributes:error: या fileWrapperFromRange:documentAttributes:error: का उपयोग आरटीएफ/RTFD के लिए जिम्मेदार ठहराया स्ट्रिंग कन्वर्ट करने के लिए कर सकते हैं। दस्तावेज़ गुणों में आपको NSDocumentTypeDocumentAttributeNSRTFTextDocumentType या NSRTFDTextDocumentType सेट करने की आवश्यकता है। initWithData:options:documentAttributes:error: या initWithFileURL:options:documentAttributes:error: का उपयोग NSAttributedString पर वापस करने के लिए करें। ये विधियां NSAttributedString UIKit Additions का हिस्सा हैं।

+0

: [1] [1] [लिंक यहाँ विवरण दर्ज] उत्तर के लिए Thx। मुझे एनएससीओडीिंग के बारे में पता है, लेकिन मुझे एनएसएफ़्रिब्यूटेड स्ट्रिंग के यूटीएफ -8 प्राप्त करने की आवश्यकता है क्योंकि मैं यूटीएफ -8 एक्सएमएल फाइल में स्ट्रिंग लिख रहा हूं। क्या ऐसा करने का कोई तरीका है? –

+1

@ MichalJuriJurník: ऐसी कोई चीज नहीं है जैसे "एनएसटीएफ -8 एनटीएसटीयूटेड स्ट्रिंग"। एक NSAttributedString एक स्ट्रिंग प्लस विशेषताओं है; आप यूटीएफ -8 डेटा के रूप में किसी स्ट्रिंग को एन्कोड कर सकते हैं, लेकिन आपको अभी भी अलग-अलग गुणों को क्रमबद्ध करना होगा, और फिर उन्हें दोनों को deserialize/decodeize करना होगा और उन्हें दूसरे छोर पर एक साथ वापस रखना होगा। आरटीएफ विधियों का प्रयोग करें; वे इसके लिए डिजाइन किए गए हैं। –

+0

अच्छा विचार के लिए Thx;) –

संबंधित मुद्दे