我NSString
代表NSDictionary
我创建了这样的字符串:
NSString * insertionStr = [dictionary description];
现在我想将其转换回NSDictionary
有可能吗?
答案 0 :(得分:1)
基于问题和评论,我会说... 不......不要这样做。
NSUserDefaults
能够存储对象值,并且可以很好地存储NSDictionary
[[NSUserDefaults standardUserDefaults] setObject: dictionary forKey:@"DetailDict"];
[[NSUserDefaults standardUserDefaults] synchronize];
并将其重新使用
NSDictionary *retrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"DetailDict"];
OR
如果您认为将其保存为字符串,请查看this question,并在检索该值时将字符串转换回Object
答案 1 :(得分:1)
来自setObject:forKey
value参数只能是属性列表对象:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。对于NSArray和NSDictionary对象,它们的内容必须是属性列表对象。
如果您的词典包含非属性列表对象,则可以将其归档并将其存储到文件中,如果词典中的所有对象都实现NSCoding
。
答案 2 :(得分:1)
字典表示为键/值对。您可以使用以下单个值创建字典:
NSDictionary *dictionary = @{@"name": @"Mike"};
您还可以存储多个键/值对:
NSDictionary *newDictionary = @{
@"firstName": @"Mike",
@"lastName": @"Smith"
};
稍后如果你想从字典中取回值,你可以使用密钥从中获取值:
NSString *first = newDictionary[@"firstName"];
NSString *last = newDictionary[@"lastName"];
// first will now be @"Mike" and last will be @"Smith"
将字典想象为数组,但不是使用索引(数字)来引用您使用键(字符串)的值。
根据发表的评论,如果你还想存储一系列词典,你可以做到这一点没问题:
NSDictionary *firstDictionary = @{@"key": @"value"};
NSDictionary *secondDictionary = @{@"anotherKey": @"anotherValue"};
NSArray *array = @[firstDictionary, secondDictionary];
答案 3 :(得分:1)
要将字典保存到文件(或其他媒体)并稍后能够恢复,您应该使用JSON或plist格式。
对于JSON,您的数据必须限制为字典,数组,字符串和NSNumbers的组合。对于plist,它必须是其中之一或NSDate或NSData。
对于JSON,您可以使用NSJSONSerialization的方法转换为NSData,然后将数据保存到文件中。要恢复,请将文件加载到NSData并通过NSJSONSerialization运行。
对于plist格式,请使用NSDictionary writeToFile
和dictionaryWithContentsOfFile
方法。
请注意,默认情况下,您获取的对象是不可变的。如果您想要来自JSON的可变对象,JSONObjectWithData
上有一个名为NSJSONReadingMutableContainers
的选项。使用plists我相信你需要使用更复杂的plist接口(使用简单的NSDictionary接口),允许你指定类似的选项。