2011-05-23 14 views
6

से NSData मैं NSKeyedArchiver से उत्पन्न एनएसडीटा को एनएसएसटींग में परिवर्तित करने की कोशिश कर रहा हूं ताकि मैं इसे पास कर सकूं और अंत में इसे एनएसडीटा में परिवर्तित कर सकूं। मुझे इसे एक स्ट्रिंग के रूप में पास करना होगा (मैं तीन20 यूआरएल पास कर रहा हूं)। मैं विभिन्न एन्कोडिंग, यूटीएफ 8, एएससीआईआई इत्यादि से गुजर चुका हूं और काम करने के लिए कुछ भी नहीं प्राप्त कर सकता हूं। NSKeyedArchiver का कहना है कि NSData को एक संपत्ति सूची के रूप में बनाया गया है: NSPropertyListBinaryFormat_v1_0।NSKeyedArchiver से NSString

क्या किसी को पता है कि मैं इस एनएसडीटा को स्ट्रिंग में कैसे परिवर्तित कर सकता हूं और फिर से वापस कर सकता हूं? स्ट्रिंग का आकार कोई मुद्दा नहीं है।

धन्यवाद

उत्तर

11

क्या आप चाहते हैं::

id<nscoding> obj; 

NSData * data  = [NSKeyedArchiver archivedDataWithRootObject:obj]; 
NSString * string = [data base64EncodedString]; 

NSData *dataFromString = [[NSString stringWithFormat:@"%@", yourString] dataUsingEncoding:NSASCIIStringEncoding]; 

तो डेटा निकालने के

और फिर ओथ एर रास्ता चारों ओर

NSString * string; 

NSData * data = [NSData dataFromBase64String:string]; 
id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data] 

आप base64EncodedString और dataFromBase64String जोड़ सकते हैं: NSData श्रेणी यहाँ उपलब्ध NSData+Base64 साथ लेकिन अब यह डिफ़ॉल्ट

1

आपको बस इतना करना होना चाहिए कुछ इस तरह है:

NSString *stringFromData = [[NSString alloc] initWithData:dataFromString encoding:NSASCIIStringEncoding]; 
+0

दुर्भाग्यवश, और मुझे यकीन नहीं है कि ऐसा क्यों नहीं लगता है। मुझे एक बहुत छोटी स्ट्रिंग मिलती है, उदाहरण के लिए "आउटपुट के रूप में" bplist00Ô "। – kodai

+0

यह निश्चित रूप से विषम है। मैं विकल्पों के रूप में कुछ चीजों का परीक्षण करने जा रहा हूं और काम करता हूं (आशा है कि) कुछ काम करता है जो काम करता है – justin

+0

मैंने जो पोस्ट किया है, वह मेरे लिए चाल है, हालांकि मैंने देखा कि यदि आप डेटा को एक अलग विधि से स्ट्रिंग में डीकोड करते हैं जब आप इसे एन्कोड करते हैं, तो आपको दोष मिलते हैं। यह आपकी स्ट्रिंग को एन्कोड करने के बाद 'डेटाफ्रमस्ट्रिंग' उदाहरण में 'बनाए रखना' जोड़कर तय किया जा सकता है। उम्मीद है कि यह आपके द्वारा किए गए मुद्दे को हल करता है। यदि नहीं, तो आवश्यक होने पर एक और संभावित मार्ग है – justin

2

आईओएस 9.2.1, Xcode 7.2.1 द्वारा शामिल किया गया है, एआरसी सक्षम

base64EncodedString, dataFromBase64String: मूल्यह्रास iOS 7.0 के बाद

अपडेट किया गया समाधान:

एनकोड स्ट्रिंग के लिए:

id<nscoding> obj; 

NSData *data  = [NSKeyedArchiver archivedDataWithRootObject:obj]; 
NSString *string = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 

डिकोड आंकड़ों के:

NSString *string; 

NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:(NSDataBase64DecodingIgnoreUnknownCharacters)]; 
id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

नोट: यह बहुत उपयोगी है जब कीचेन स्टोर करने के लिए के साथ काम kSecValueData में कुंजी/मान जोड़े का एक शब्दकोश।

उम्मीद है कि यह किसी की मदद करेगा! चीयर्स।