I\'m trying to convert NSData generated from NSKeyedArchiver to an NSString so that I can pass it around and eventually convert it back to NSData. I have to pass this as a strin
What you want is:
id<nscoding> obj;
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:obj];
NSString * string = [data base64EncodedString];
And then the other way around
NSString * string;
NSData * data = [NSData dataFromBase64String:string];
id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data]
You can add base64EncodedString and dataFromBase64String: with the NSData category available here NSData+Base64 but it is now included by default
iOS 9.2.1, Xcode 7.2.1, ARC enabled
base64EncodedString, dataFromBase64String: depreciated after iOS 7.0
Updated solution:
Encode to string:
id<nscoding> obj;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:obj];
NSString *string = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
Decode to data:
NSString *string;
NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:(NSDataBase64DecodingIgnoreUnknownCharacters)];
id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Note: This is very useful when working with keychain to store a dictionary of key/value pairs into kSecValueData.
Hope this helps someone! Cheers.
All you should have to do is something like this:
NSData *dataFromString = [[NSString stringWithFormat:@"%@", yourString] dataUsingEncoding:NSASCIIStringEncoding];
then to extract the data:
NSString *stringFromData = [[NSString alloc] initWithData:dataFromString encoding:NSASCIIStringEncoding];