2010-05-30 4 views
0

배열을 채웠습니다.NSMutableDictionary를 업데이트하는 방법. 내 코드가 작동하지 않습니다.

arrSettings = [[NSMutableArray alloc] initWithContentsOfFile:[self settingsPath]]; 

이 파일은 루트가 배열이고 숫자로 정의 된 세 개의 키가있는 사전이있는 plist입니다. 나는 또한 문자열을 키 설정 시도했다.

나는보기를 사용하여보기에 plist 파일에 값을 표시합니다.

diaper = [[arrSettings objectAtIndex:0] objectForKey:@"Diaper Expenses"]; 
oil = [[arrSettings objectAtIndex:0] objectForKey:@"Oil Used"]; 
tree = [[arrSettings objectAtIndex:0] objectForKey:@"Wood Used"]; 

이 코드는 잘 작동, 사전의 값이 변수에 할당하고이 표시됩니다. 사용자는 변경 한 다음 저장 버튼을 누를 수 있습니다.

이 코드를 사용하여 배열의 사전 부분을 추출하여 업데이트 할 수 있습니다. editDictionary에 대한 할당이 작동합니다. 나는 사건을 포함하여 키 이름을 두 번 확인했는데 그 말이 맞습니다.

나는의 NSNumber를 사용했습니다이 예에서는
editDictionary = [[NSMutableDictionary alloc] init]; 
editDictionary = [arrSettings objectAtIndex:0]; 
NSNumber *myNumber = [NSNumber numberWithFloat:diaperAmount]; 
[editDictionary setValue:myNumber forKey:@"Diaper Expenses"]; 
myNumber = [NSNumber numberWithFloat:oilAmount];  
[editDictionary setValue:myNumber forKey:@"Oil Used"]; 
myNumber = [NSNumber numberWithFloat:treeAmount]; 
[editDictionary setValue:myNumber forKey:@"Wood Used"]; 

. 하지만 NSNumber를 만드는 대신 SetValue 의 일부로 xxxAmount 필드를 시도했습니다. 어떤 구현도 작동하지 않습니다.

몇 가지 이상한 일이 발생합니다. 때로는 처음 두 setvalue 문은 작동하지만 마지막 setvalue는 EXC_BAD_ACCESS 실패로 실패합니다. 다른 경우에는 첫 번째 setValue가 동일한 오류로 실패합니다. 나는 처음 두 사람이 때때로 일하는 이유를 모른다.

나는 다음에해야할 일이 없어졌습니다. 나는 여러 가지 함축을 시도했지만 그 중 아무 것도 작동하지 않습니다. 또한 디버거에서 어떻게 editDictionary 요소를 표시 할 수 있습니까? editDictionary를 볼 수는 있지만 개별 요소를 표시하는 방법을 모르겠습니다.

+2

긴급한 경우 코드 형식을 지정하십시오. – miku

답변

2

editDictionary에 2 개의 과제가 있고 두 번째 과제가 첫 번째 과제를 지 웁니다. 어쩌면 당신은 editDictionary = [[arrSettings objectAtIndex:0] mutableCopy] 같은 것을 의미할까요?

+0

두 과제가 어떻게 처리되는지 이해할 수 없습니다. 할당과 할당이 있습니다. 이 경우 할당이 할당이라고 말하고 있습니까? 사전과 같은 객체는 할당을하기 전에 할당을 요구하지 않습니까? 이것은 한 줄로 결합되었을 수 있지만 일반적으로 두 개를 사용합니다. [[NSMutableDictionary alloc] initwithArray [arrSettings objectAtIndex : 0]]; – user353865

+1

'editDictionary ='로 시작하는 두 줄이 있습니다. 그것들은 2 가지 과제입니다. 나는 당신이 두 번째 책에서 사전의 내용을 설정하려고 했었지만, 그것은 당신이 한 것과 다른 것이 었습니다. 당신은 방금 다른 사전으로 바꾸 었습니다. – JWWalker

관련 문제