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 –