9

我正在尝试将从 NSKeyedArchiver 生成的 NSData 转换为 NSString,以便我可以将其传递并最终将其转换回 NSData。我必须将其作为字符串传递(我正在使用 three20 URL 传递)。我经历了各种编码、UTF8、ASCII 等,但无法正常工作。NSKeyedArchiver 说 NSData 被格式化为一个属性列表:NSPropertyListBinaryFormat_v1_0。

有谁知道如何将此 NSData 转换为 String 并再次返回?字符串的大小不是问题。

谢谢

4

3 回答 3

14

你想要的是:

id<nscoding> obj;

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

然后反过来

NSString * string;

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

您可以添加 base64EncodedString 和 dataFromBase64String: NSData 类别可在此处NSData+Base64但现在默认包含

于 2013-07-11T12:09:13.150 回答
2

iOS 9.2.1、Xcode 7.2.1、ARC 已启用

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

注意:这在使用 keychain 将键/值对字典存储到 kSecValueData 时非常有用。

希望这对某人有帮助!干杯。

于 2016-03-02T20:13:05.767 回答
0

你应该做的就是这样的:

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

然后提取数据:

NSString *stringFromData = [[NSString alloc] initWithData:dataFromString encoding:NSASCIIStringEncoding];
于 2011-05-23T22:20:29.603 回答