0

由于某些奇怪的原因, golferStats 没有正确存储信息......

我把这段代码中的一堆东西删掉了,为什么仍然无法正常工作?

问题:最后一个 NSLOG 在它应该返回一个巨大的数组时返回 nil...

NSMutableDictionary *golferStats = [[NSMutableDictionary alloc] init];
golferStats = [userDefaults objectForKey:@"golferStats"];

[golferStats setObject:golferTwoIconCounter forKey:golferName]; //golferName is k

[userDefaults setObject:golferStats forKey:@"golferStats"];
[userDefaults synchronize];
NSLog(@"SAVED SCORE CARD");
NSLog(@"%@",[golferStats objectForKey:@"k"]);
4

2 回答 2

2

NSMutableDictionary *golferStats = [[NSMutableDictionary alloc] init];

golferStats = [userDefaults objectForKey:@"golferStats"];

...

[golferStats release];

您首先创建一个NSDictionary,然后在它之上分配,从而泄漏内存并可能nil从用户默认值中恢复。 setObject:forKey:nil字典中是无操作的,然后您将其设置回用户默认值。

编辑:

尝试先检查是否有字典:

NSDictionary *golferStats = [userDefaults objectForKey:@"golferStats"];
if (golferStats == nil) {
    golferStates = [NSDictionary dictionary]; // this will not leak
}
...
于 2012-06-01T18:30:36.123 回答
1

如果要在字典已经存在的情况下保留字典的现有内容请执行以下操作:

NSMutableDictionary *golferStats = [userDefaults objectForKey:@"golferStats"];
if (!golferStats) golferStats = [[[NSMutableDictionary alloc] init] autorelease];

[golferStats setObject:golferTwoIconCounter forKey:golferName];
[userDefaults setObject:golferStats forKey:@"golferStats"];
[userDefaults synchronize];

// no [golferStats release] because of autorelease above
于 2012-06-01T18:46:21.430 回答