NSData从NSKeyedArchiver到NSString

时间:2011-05-23 22:05:38

标签: objective-c cocoa nsstring nsdata nskeyedarchiver

我正在尝试将NSKeyedArchiver生成的NSData转换为NSString,以便我可以传递它并最终将其转换回NSData。我必须将其作为字符串传递(我使用的是三次传递URL)。我已经经历了各种编码,UTF8,ASCII等,并且无法获得任何工作。 NSKeyedArchiver说NSData被格式化为属性列表:NSPropertyListBinaryFormat_v1_0。

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

由于

3 个答案:

答案 0 :(得分:12)

你想要的是:

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]

您可以使用此处提供的NSData类别NSData+Base64添加base64EncodedString和dataFromBase64String:但现在默认包含它

答案 1 :(得分: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];

注意:当使用钥匙串将键/值对的字典存储到kSecValueData时,这非常有用。

希望这有助于某人!欢呼声。

答案 2 :(得分:0)

所有你应该做的就是这样:

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

然后提取数据:

NSString *stringFromData = [[NSString alloc] initWithData:dataFromString encoding:NSASCIIStringEncoding];