删除UserDefault里某个object致app crash的解决过程

近在做的项目中,需要与NSUserDefaults打交道,比如NSUserDefaults里某个值变更时,需要对其重新save,但在重新save时发生crash,crash log如下:

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

网上google了下答案,最终在stackOverFlow里找到了答案,爱死stackOverFlow了,哈哈

http://stackoverflow.com/questions/10260797/removing-an-object-from-a-mutable-dictionary-throws-an-exception

错误的代码:

+(void)removeItemFromUserDefault:(NSString *)item_id   //将宝贝从UserDefault里删除

{

   NSUserDefaults * userDefault = [NSUserDefaultsstandardUserDefaults];

    NSMutableDictionary * dictionary = [userDefault dictionaryForKey:DHK_DATA];

    [dictionary removeObjectForKey:item_id];

    [self saveArray2UserDefault:dictionary];

}

正确的代码:

+(void)removeItemFromUserDefault:(NSString *)item_id   //将宝贝从UserDefault里删除

{

   NSUserDefaults * userDefault = [NSUserDefaultsstandardUserDefaults];

   NSMutableDictionary * dictionary = [[userDefault dictionaryForKey:DHK_DATA]mutableCopy];

    [dictionary removeObjectForKey:item_id];

    [self saveArray2UserDefault:dictionary];

}

出错的原因在于,通过[userDefaultdictionaryForKey:DHK_DATA]返回的是一个nsdictionary,而这个类对应的对象是不具备删除功能的,所以crash了。

改为  NSMutableDictionary * dictionary = [[userDefaultdictionaryForKey:DHK_DATA]mutableCopy]将返回的nsdictionary复制一个可变的副本,也就具有删除功能了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值