이 코드가 있으며 중첩 된 사전에서 항목을 제거한 다음 사전을 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 :] : 변하기 쉬운 메소드가 불변의 객체로 전송되었습니다. –
brandDict에 대한 선언이 코드 스 니펫에 없습니다. 변경 가능한 DICT인지 아니면 subsDict에서했던 것처럼 mutablecopy 했습니까? – Toastor