मेरे पास एक 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'
धन्यवाद: संकलक इस त्रुटि वापस दे।
NSData स्ट्रिंग मान 'डेटा' बनाने में कुछ भी सेट नहीं है, यह केवल एक खाली 'NSMutableData' है। एनएसएसटींग से एनएसडीटा प्राप्त करने में 'डी', एनएसएसटींग क्या है? अधिक आम तौर पर आप क्या करने की कोशिश कर रहे हैं? – zaph
'[एन्कोडर फिनिशएन्कोडिंग]; 'डेटा वैलोरिज जो प्रारंभ में खाली है। मुझे 'NSKeyedArchiver' का उपयोग करके दो अनुप्रयोगों के बीच एक संपूर्ण कक्षा उत्तीर्ण करने की आवश्यकता है। हां, 'd' पहले बनाई गई स्ट्रिंग है। – elp
क्यों 'एनएसएसटींग' में परिवर्तित करें, क्यों न केवल 'एनएसडीटा' के रूप में पास करें? – zaph