NSData from NSKeyedArchiver to NSString

随声附和 提交于 2020-01-01 05:03:27

问题


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 string (I'm using three20 URL passing). I've gone through various encodings, UTF8, ASCII, etc. and can't get anything to work. NSKeyedArchiver says that the NSData is formated as a property list: NSPropertyListBinaryFormat_v1_0.

Does anyone have any idea how I can convert this NSData to a String and back again? Size of the string isn't an issue.

Thanks


回答1:


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




回答2:


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.




回答3:


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];


来源:https://stackoverflow.com/questions/6103579/nsdata-from-nskeyedarchiver-to-nsstring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!