无法制作可变数组iOS

时间:2017-07-29 05:23:21

标签: ios objective-c nsmutablearray nsuserdefaults nsmutabledictionary

我是iOS新手,

我在NSUserDefaults

中存储字典数组

我现在要做的是编辑NSUserDefaults中存储的字典数组。

以下是我编写的代码但它在此行崩溃

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

并说:

  

由于未捕获的异常终止应用' NSInternalInconsistencyException',原因:' - [__ NSCFDictionary   setObject:forKey:]:发送到不可变对象的mutating方法

代码段:

存储

 [[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"];

请帮忙,为什么它不起作用?

1 个答案:

答案 0 :(得分:0)

试试此代码

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

你正在使用数组

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

但数组包含NSDictionary而不是NSMutableDictionary因此您需要使用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"];