Iphone 不存储信息的词典
出于某种奇怪的原因,golferStats没有正确存储信息 我在这段代码中删掉了一堆东西,只保留了最基本的内容,为什么它仍然不工作 问题:最后一个NSLOG在应该返回一个巨大数组时返回nilIphone 不存储信息的词典,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,出于某种奇怪的原因,golferStats没有正确存储信息 我在这段代码中删掉了一堆东西,只保留了最基本的内容,为什么它仍然不工作 问题:最后一个NSLOG在应该返回一个巨大数组时返回nil NSMutableDictionary *golferStats = [[NSMutableDictionary alloc] init]; golferStats = [userDefaults objectForKey:@"golferStats"]; [golferStats setObject:g
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"]);
NSMutableDictionary*golferStats=[[NSMutableDictionary alloc]init]代码>
golferStats=[userDefaults objectForKey:@“golferStats”]代码>
[golferStats发布]代码>
您首先创建一个NSDictionary
,然后在其上赋值,从而泄漏内存,并可能从用户默认值中恢复nil
setObject:forKey:
在nil
字典中是一个no-op,然后将其设置回用户默认值
编辑:
首先尝试检查是否有字典:
NSDictionary *golferStats = [userDefaults objectForKey:@"golferStats"];
if (golferStats == nil) {
golferStates = [NSDictionary dictionary]; // this will not leak
}
...
NSMutableDictionary*golferStats=[[NSMutableDictionary alloc]init]代码>
golferStats=[userDefaults objectForKey:@“golferStats”]代码>
[golferStats发布]代码>
您首先创建一个NSDictionary
,然后在其上赋值,从而泄漏内存,并可能从用户默认值中恢复nil
setObject:forKey:
在nil
字典中是一个no-op,然后将其设置回用户默认值
编辑:
首先尝试检查是否有字典:
NSDictionary *golferStats = [userDefaults objectForKey:@"golferStats"];
if (golferStats == nil) {
golferStates = [NSDictionary dictionary]; // this will not leak
}
...
如果要在词典已存在的情况下保留词典的现有内容,请执行以下操作:
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
如果要在词典已存在的情况下保留词典的现有内容,请执行以下操作:
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
NSMutableDictionary*golferStats=[[NSMutableDictionary alloc]init];golferStats=[userDefaults objectForKey:@“golferStats”]代码>NSMutableDictionary*golferStats=[[NSMutableDictionary alloc]init];golferStats=[userDefaults objectForKey:@“golferStats”]代码>如果OP不想保留任何其他现有词典条目(如果它们确实存在),则这是正确的。如果OP不想保留任何其他现有词典条目(如果它们确实存在),则这是正确的。