在NSUserDefaults中存储词典字典

时间:2015-01-01 20:06:01

标签: objective-c nsdictionary nsuserdefaults

我正在尝试存储一个包含NSUserDefaults中两个词典的字典。

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSDictionary *defDict = [def dictionaryRepresentation];

defaultTopics = [[NSArray alloc] initWithObjects:@"Animals",
                                                    @"Numbers",
                                                    @"AroundTown",
                                                    @"Actions", nil];
defaultValues = [[NSArray alloc] initWithObjects:@1, @0, @0, @0, nil];

NSDictionary *dd = [[NSDictionary alloc] initWithObjects:defaultValues forKeys:defaultTopics];

NSDictionary *de = [[NSDictionary alloc] initWithObjects:@[dd, dd] forKeys:@[@"English", @"Indonesian"]];

[defDict setValue:de forKey:@"UnlockedTopics"];
[def synchronize];

在此之后,NSLog(@"%@", [def dictionaryRepresentation]);打印正确的字典,只要我不退出应用程序,一切都按预期进行。但是,如果我退出应用并重新启动,

[defDict objectForKey:@"UnlockedTopics"]

总是零。是什么原因,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

字典词典没有被存储的原因是你永远不会存储它。你所做的只是设置字典的键。你在打电话

[defDict setValue:de forKey:@"UnlockedTopics"];

但这与在NSUserDefaults 中设置任何@"UnlockedTopics"键值对不同。如果你想写NSUserDefaults,写信给它 - 例如将setObject:forKey: 发送到NSUserDefaults