2012-04-02 18 views
6

मेरे पास एक NSData ऑब्जेक्ट है।एनएसडीटा को एनएसएसटींग के रूप में कैसे पास किया जाए और इसे वापस प्राप्त करें?

मैं इसे एक स्ट्रिंग में परिवर्तित करना चाहता हूं, एक फ़ंक्शन पर पास करना चाहता हूं और फिर वापस NSData ऑब्जेक्ट पर वापस जाना चाहता हूं।

लेकिन कैसे?

मैंने इस विधि की कोशिश की, लेकिन एनएसडीटा मान मूल से अलग है!

यहाँ मेरी कोड:

// a generic class 
    APClass *c = [[APClass alloc] init]; 
    c.aNumber = 123; 
    c.aString = @"my string"; 

    // my data obj 
    NSMutableData *data = [NSMutableData data]; 

    // archiver to store class in nsdata 
    NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [encoder encodeObject:[NSNumber numberWithInt:c.aNumber] forKey:@"aNum"]; 
    [encoder encodeObject:c.aString forKey:@"aStr"]; 
    [encoder finishEncoding]; 
    [encoder release]; 

    [c release]; 

    NSLog(@"%@", data); 
    NSString *d = [NSString stringWithFormat:@"%@", data]; 

    // --- 

    NSString *strFromData = [NSString stringWithFormat:@"%@", d]; 

    NSData *dataNM = [strFromData dataUsingEncoding:NSUTF8StringEncoding]; 

    // decoder to retrieve class from nsdata  
    NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:dataNM]; 
    int number  = [[decoder decodeObjectForKey:@"aNum"] intValue]; 
    NSString *string = [decoder decodeObjectForKey:@"aStr"]; 
    [decoder finishDecoding]; 
    [decoder release]; 

    NSLog(@"[Number: %d] -- [String: %@]", number, string); 

कैसे मैं वापस मूल NSData करने के लिए परिवर्तित कर सकते हैं?

डेटा और डेटा एनएम आकार में अलग हैं।

2012-04-02 16:33:28.269 DataTest[18008:f803] -[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x6b46c80

2012-04-02 16:33:28.270 DataTest[18008:f803] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x6b46c80'

धन्यवाद: संकलक इस त्रुटि वापस दे।

+0

NSData स्ट्रिंग मान 'डेटा' बनाने में कुछ भी सेट नहीं है, यह केवल एक खाली 'NSMutableData' है। एनएसएसटींग से एनएसडीटा प्राप्त करने में 'डी', एनएसएसटींग क्या है? अधिक आम तौर पर आप क्या करने की कोशिश कर रहे हैं? – zaph

+0

'[एन्कोडर फिनिशएन्कोडिंग]; 'डेटा वैलोरिज जो प्रारंभ में खाली है। मुझे 'NSKeyedArchiver' का उपयोग करके दो अनुप्रयोगों के बीच एक संपूर्ण कक्षा उत्तीर्ण करने की आवश्यकता है। हां, 'd' पहले बनाई गई स्ट्रिंग है। – elp

+0

क्यों 'एनएसएसटींग' में परिवर्तित करें, क्यों न केवल 'एनएसडीटा' के रूप में पास करें? – zaph

उत्तर

5

हल हो गया।

dataUsingEncoding का उपयोग करना, NSData का मूल्य यह अलग है।

तरीकों या ऐप्लिकेशन आदि, मैं का उपयोग किया है base64 रूपांतरण के आसपास डेटा पास करने के।

एनकोड

NSString *d = 
    [NSString stringWithFormat:@"appdue://obj=%@", 
    [APBase64Converter base64forData:data]]; 

डिकोड

NSData *data = [APBase64Converter base64DataFromString:urlParams]; 

APBase64Converter एक lib है कि आसानी से सांकेतिक शब्दों में बदलना/डीकोड डेटा और तार है। सभी http://goo.gl/8YNjS

धन्यवाद:

कार्य उदाहरण और APBase64Converter lib यहाँ से डाउनलोड किया जा सकता है।

मैं "को बनाए रखने के लिए" इस पोस्ट के लोगों और मुझे अगली बार मदद करता है!

+0

क्या किसी तृतीय पक्ष लाइब्रेरी की बजाय ऐप्पल-प्रदत्त फ़ंक्शंस का उपयोग करके ऐसा करने का कोई तरीका है? – Orchid

+0

मुझे नहीं पता। मैं सभी परियोजनाओं में अपने lib का उपयोग करें। :) – elp

+0

ठीक है, फिर फॉलोअप प्रश्न। क्या ऐप्पल ने इस लाइब्रेरी वाले ऐप स्टोर में ऐप स्वीकार कर लिया है, या यह सिर्फ एक व्यक्तिगत/जेल्रैक प्रोजेक्ट है? – Orchid

0

उपयोग
NSDataNSString रहे हैं:
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
और
NSStringNSData रहे हैं:
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding

एन्कोडिंग के साथ
NSUTF8StringEncoding
या
NSMacOSRomanStringEncoding (WHI सी 8-बिट एन्कोडिंग है)।

+0

मुझे NSData स्टोर करने के लिए 'NSKeyedArchiver' का उपयोग करने की आवश्यकता है। 'dataUsingEncoding' पहले से ही उपयोग किया जाता है। आपको लगता है कि समस्या 'initWithData' है? – elp

-1

उपयोग Base64 वर्ग यह GitHub

 DatabaseResult* result = [self.database executeQuery:@"SELECT * FROM `images`  WHERE image_id = ? AND imagetype = ?", self.routeId,self.imagetype]; 

     for(EGODatabaseRow* row in result) { 

     NSString *strImage=[row stringForColumn:@"image_photo"]; 

     [Base64 initialize]; 

     NSData *data = [Base64 decode:strImage]; 

     UIImage *image=[UIImage imageWithData:data]; 

     } 

में उपलब्ध है यह वह जगह है मैं कैसे छवि के लिए डेटा के आंकड़ों के स्ट्रिंग को बदलने और उसके बाद।

+0

डेटाबेस रीसेट क्या है? EGODatabaseRow? Base64? – elp

+0

इस प्रकार मैं डेटाबेस से base64 स्ट्रिंग प्राप्त करता हूं। बेस 64 के बारे में मैं पहले ही उत्तर के शीर्ष पर इसका उल्लेख करता हूं। – Arun

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