2012-06-01 77 views
0

出於某種奇怪的原因golferStats不存儲信息正確...的NSDictionary不存儲信息

我切出這個代碼一堆東西到裸基礎爲何仍然沒有工作?

問題:最後的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"]); 
+1

'NSMutableDictionary * golferStats = [[NSMutableDictionary alloc] init]; golferStats = [userDefaults objectForKey:@「golferStats」];'< - 這是很糟糕的內存泄漏。 – 2012-06-01 18:28:31

回答

2

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

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

...

[golferStats release];

您首先創建一個NSDictionary,然後將其分配在頂部,從而導致內存泄漏,並且可能從用戶默認設置返回nilnil字典中的setObject:forKey:是無操作的,然後您將其設置回用戶默認值。

編輯:

嘗試檢查,如果有一本字典第一:

NSDictionary *golferStats = [userDefaults objectForKey:@"golferStats"]; 
if (golferStats == nil) { 
    golferStates = [NSDictionary dictionary]; // this will not leak 
} 
... 
+1

如果OP不想保留任何其他現有字典條目(如果它們確實存在),則這是正確的。 – paulmelnikow

+0

@noa在adit中解決。 – Richard

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