我正在尝试将NSKeyedArchiver生成的NSData转换为NSString,以便我可以传递它并最终将其转换回NSData。我必须将其作为字符串传递(我使用的是三次传递URL)。我已经经历了各种编码,UTF8,ASCII等,并且无法获得任何工作。 NSKeyedArchiver说NSData被格式化为属性列表:NSPropertyListBinaryFormat_v1_0。
有没有人知道如何将此NSData转换为String并再次返回?字符串的大小不是问题。
由于
答案 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];