0

我是新來的iOS,無法使可變數組的iOS

我的字典存儲數組中NSUserDefaults

我想現在要做的是編輯存儲在NSUserDefaults字典的數組。

這是我寫的代碼,但它崩潰在這一行

[array[0] setObject:updateMonth forKey:@"Month"]; 

,並說:

終止應用程序由於未捕獲的異常 'NSInternalInconsistencyException',原因是:「 - [__ NSCFDictionary setObject:forKey:]:發送給不可變對象的變異方法

代碼片段:

儲存:

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MONTHLY_BUDGET"]; 

,我的數據是

(
    { 
     Amount = 1; 
     Month = "July 2017"; 
     isMonthlySet = 1; 
    } 
    ) 

Retriving:

 array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"MONTHLY_BUDGET"] mutableCopy]; 

     NSString *updateMonth = @"ABCD"; 

     [array[0] setObject:updateMonth forKey:@"Month"]; 

請幫幫忙,爲什麼它不worki NG?

+0

你的陣列是可變的但不是Dictionary,並且您正在修改字典值 –

+0

添加更多的代碼以便理解。添加存儲和檢索代碼。 – KKRocks

+0

只需將其替換爲:[array setObject:updateMonth forKey:@「Month」]; – KKRocks

回答

0

試試這個代碼

[[array[0] mutableCopy] setObject:updateMonth forKey:@"Month"]; 

你正在做正確的與陣列

array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"MONTHLY_BUDGET"] mutableCopy]; 

但數組包含NSDictionaryNSMutableDictionary所以你需要使用mutableCopy

希望這是你清楚

編輯

你應該用可讀的代碼讓你輕鬆在未來

使用更改下面的代碼

NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"MONTHLY_BUDGET"] mutableCopy]; 

NSMutableDictionary *dictData = [array[0] mutableCopy] 
// Set value 

[dictData setObject:updateMonth forKey:@"Month"]; 

//分配到陣列回

[array replaceObjectAtIndex:0 withObject:dictData] 

Change UserDefault 

    [[NSUserDefaults standardUserDefaults] setObject:[array copy] forKey:@"MONTHLY_BUDGET"]; 
+0

thanx幫助它的工作應用程序不會崩潰,但updateMonth的值沒有得到設置:( –

+0

驚人的答案男人它的作品....我真的明白我的錯誤,但我需要寫'[數組]複製設置對象? –

+0

是的,最好只存儲NSArray而不是NSMutableArray –