无法创建可变数组 iOS

Unable to make mutable array iOS

我是 iOS、

的新手

我正在 NSUserDefaults

中存储字典数组

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

这是我写的代码,但是在这一行崩溃了

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

并说:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object

代码片段:

存储:

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

我的数据是

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

正在检索:

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

        NSString *updateMonth = @"ABCD";

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

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

试试这个代码

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