我是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"];
请帮忙,为什么它不起作用?
答案 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"];