2010-05-30 1 views
0

Я заполнил массив используя.Как обновить NSMutableDictionary. Мой код не работает

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

Файл представляет собой слой с корнем в виде массива, а затем словарь с тремя тремя ключами, обозначенными как число. Я также попытался установить ключи в строку.

Отображает значения в файле plist на экране с использованием.

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

Этот код отлично работает, значения в словаре присваиваются переменным, и они отображаются. Пользователь может внести изменения, а затем нажать кнопку сохранения.

Этот код используется для извлечения словарной части массива, поэтому я могу его обновить. Выполнение задания editDictionary. Я дважды проверял имена ключей, включая случай, и это правильно.

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. Но я также попробовал поле xxxAmount как часть SetValue вместо создания NSNumber. Ни одна из них не работает.

Несколько странных вещей случаются. Иногда работают первые два оператора setvalue, но последнее значение setvalue не выполняется с ошибкой EXC_BAD_ACCESS. В других случаях первый setValue терпит неудачу с той же ошибкой. Я понятия не имею, почему первые два иногда работают.

Я в недоумении, что делать дальше. Я пробовал несколько имплантов, и никто из них не работает. Также в отладчике можно отобразить элементы editDictionary. Я могу видеть editDictionary, но я не знаю, как отображать отдельные элементы.

+2

срочно, пожалуйста, отформатируйте свой код. – miku

ответ

2

У вас есть 2 задания для редактированияDictionary, а второй - первый. Может, вы имели в виду что-то вроде editDictionary = [[arrSettings objectAtIndex:0] mutableCopy]?

+0

Я не понимаю, как у меня есть два задания. Существует выделение, а затем задание. Вы говорите, что alloc является назначением в этом случае. Разве объект, подобный словарю, не требует выделения перед назначением? Это могло быть объединено на одной линии, но я обычно использую два. [[NSMutableDictionary alloc] initwithArray [arrSettings objectAtIndex: 0]]; – user353865

+1

У вас есть 2 строки, начинающиеся с 'editDictionary ='. Это 2 задания. Я предполагаю, что вы хотели установить содержание своего словаря во втором, но это не то, что вы сделали, вы просто переключились на другой словарь. – JWWalker