无法使可变数组的iOS
我是新来的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?
试试这个代码
[[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"];
thanx帮助它的工作应用程序不会崩溃,但updateMonth的值没有得到设置:( –
惊人的答案男人它的作品....我真的明白我的错误,但我需要写'[数组]复制设置对象? –
是的,最好只存储NSArray而不是NSMutableArray –
你的阵列是可变的但不是Dictionary,并且您正在修改字典值 –
添加更多的代码以便理解。添加存储和检索代码。 – KKRocks
只需将其替换为:[array setObject:updateMonth forKey:@“Month”]; – KKRocks