2010-05-30 76 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的賦值工作。我仔細檢查了包括案例在內的關鍵名稱,這是正確的。

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 2010-05-30 05:42:07

回答

2

你有2個分配editDictionary,第二個清除第一個。也許你的意思是像editDictionary = [[arrSettings objectAtIndex:0] mutableCopy]

+0

我不明白我有兩個任務。有一個分配然後一個分配。你是說在這種情況下alloc是一項任務嗎?像字典這樣的對象在分配給它之前是否需要一個分配? 這可能是在一條線上組合的,但我通常使用兩條。 [[NSMutableDictionary alloc] initwithArray [arrSettings objectAtIndex:0]]; – user353865 2010-05-30 20:42:39

+1

你有兩行開始'editDictionary ='。這些是2個任務。我想你的意思是在第二個字典中設置你的字典的內容,但這不是你所做的,你只是切換到不同的字典。 – JWWalker 2010-05-30 21:30:19