Ada*_*dam 5 nsdictionary nsstring nsdata ios
关于这个问题已有很多问题,但所给出的答案都是针对特定情况的,回答了海报的个人问题,而不是问题标题.
我想知道是否有一种通用的,通用的,简单的方法将a转换NSString为a NSDictionary,反之亦然?
我有困难/复杂/非跨平台的方法,但肯定有一个更简单的方法吗?
这是我所知道/经过测试的:
Dictionary- > String方法,只要你的Dictionary只是基本数据类型,数组和字典,它就能完美运行.这涵盖了大多数现实世界的案例,但Apple没有反过来:(.
[myDictionary description];NSData无声地失败,因此它仅适用于一组有限的实际情况:
[myString dataUsingEncoding:NSUTF8StringEncoding];[[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding]; // NB:在许多情况下默默地失败,返回nil字符串NSDictionary- > NSData- >运行NSDicitonary良好 - 但它们正在使用NSData,因此它们不是直接转换,而且它们更难以使用
[NSKeyedArchiver archivedDataWithRootObject:myDictionary];[NSKeyedUnarchiver unarchiveObjectWithData:myData];[NSPropertyListSerialization dataFromPropertyList:plist format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];[NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];[NSJSONSerialization JSONObjectWithData:myData options:0 error:nil];[dataWithJSONObject:myDictionary options:0 error:nil];目前,唯一可以保证工作的路线似乎是:
编写大量的代码输出冗长XML或者JSON,将其转换为NSData,然后转换回成NSString,并发送上线.
其他任何东西的成功率都略低于100%.不幸的是,这种技术将一个非常常见的问题(字符串 - >字典 - >字符串)变成了一个我们不应该编写的多线模板代码.
此外... XML-or- JSON方法是唯一正确报告失败的方法(如果它们发生) - 编码系统都需要NSError指针.
小智 10
Apple提供了一个没有反转的Dictionary - > String方法
咦?假.不,你不应该依赖description.请改用属性列表.
前锋:
NSData *plist = [NSPropertyListSerialization
dataWithPropertyList:theDict
format:NSPropertyListXMLFormat_v1_0
options:kNilOptions
error:NULL];
NSString *str = [[NSString alloc] initWithData:plist encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
向后:
NSDictionary *dict = [NSPropertyListSerialization
propertyListWithData:[str dataUsingEncoding:NSUTF8StringEncoding]
options:kNilOptions
format:NULL
error:NULL];
Run Code Online (Sandbox Code Playgroud)
边注:
只要您的词典只是基本数据类型,它就能完美运行
那些被称为"属性列表对象".
你想要的是:
id<nscoding> obj;
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:obj];
NSString * string = [data base64EncodedString];
Run Code Online (Sandbox Code Playgroud)
然后反过来
NSString * string;
NSData * data = [NSData dataFromBase64String:string];
id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Run Code Online (Sandbox Code Playgroud)
您可以添加 base64EncodedString 和 dataFromBase64String: 以及此处提供的 NSData 类别NSData+Base64
当您尝试对不是由 utf8 字符串组成的数据的内容进行编码时,NSUTF8StringEncoding 将返回 nil。
| 归档时间: |
|
| 查看次数: |
11206 次 |
| 最近记录: |