将NSString转换为NSDictionary

Lou*_*ges 4 iphone cocoa cocoa-touch objective-c

有没有办法NSDictionary从通过其description方法创建的字符串中获取回来?

鉴于此代码:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"value 1", @"value 2", nil] forKeys:[NSArray arrayWithObjects:@"key 1", @"key 2", nil]];
NSString *dictionaryString = [dictionary description];
NSLog(dictionaryString);
Run Code Online (Sandbox Code Playgroud)

这使得这个输出:

{
    "key 1" = "value 1";
    "key 2" = "value 2";
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以从字符串返回到NSDictionary?

Ben*_*ieb 5

有可能提出一个愚蠢的问题:你为什么要这样做?如果要进出文本,请使用NSPropertyListSerialization类.

  • +1谢谢.像魅力一样......就像有人在寻找一个例子`NSError*错误; NSPropertyListFormat plistFormat; NSDictionary*temp = [NSPropertyListSerialization propertyListWithData:数据选项:NSPropertyListImmutable格式:&plistFormat错误:&error] ;; (3认同)

e.J*_*mes 5

最简洁的答案是不.描述文本旨在快速描述字典的内容,通常用于调试目的.

可能(但不推荐)解析输出字符串并使用它来填充新字典,但在许多情况下这不起作用.例如,如果您的原始字典包含任何自定义数据类型,则说明输出将显示为:

{
    "key 1" = <SomeClass 0x31415927>;
    "key 2" = <SomeClass 0x42424242>;
}
Run Code Online (Sandbox Code Playgroud)

当然,这是不可逆的.

从Apple的开发人员文档中获取该description方法NSDictionary:

如果接收方中的每个密钥都是NSString对象,则按键按升序列出条目,否则列出条目的顺序是未定义的.此方法旨在生成可读输出以用于调试目的,而不是用于序列化数据.如果要存储字典数据以供以后检索,请参阅" 属性列表编程指南""Cocoa的存档和序列化编程指南".