1
我有这段代码,并试图从嵌套字典中删除一个项目,然后将字典写回到NSUserdefaults。如果我加载一个新的驱动程序,然后回去尝试删除它,程序崩溃。这是我的代码去除。从嵌套字典中删除项目
-(void)Remove:(id)sender
{
subsDict = [[[[[NSUserDefaults standardUserDefaults] objectForKey:@"Subs"]retain] mutableCopy]autorelease];
NSLog(@"%@",modelDict);
NSLog(@"Removing Size %@",driverSize);
[[[subsDict objectForKey:driverBrand]objectForKey:driverModel]removeObjectForKey:driverSize]; //Crashes here
[self updateSizes];
NSLog(@"New sizearray:%i",[sizeArray count]);
if ([sizeArray count] == 0)
{
[brandDict removeObjectForKey: driverModel];
[self updateModels];
NSLog(@"New modelarray count:%i",[modelArray count]);
NSLog(@"driver model: %@ Modelarray %@",driverModel, modelArray);
if ([modelArray count] == 0) {
[subsDict removeObjectForKey:driverBrand];
}
}
NSLog(@"New subdict:%@",subsDict);
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:subsDict forKey:@"Subs"];
[userDefaults synchronize];
}
对不起,崩溃错误是 - [NSCFDictionary removeObjectForKey:]:发送到不可变对象的变异方法。 – 2011-02-28 19:59:49
在你的代码片段中没有对brandsDict的声明 - 你确定它是一个可变的字典吗?或者你可以像subsDict一样使用mutablecopy吗? – Toastor 2011-02-28 20:14:31