删除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复制一个可变的副本,也就具有删除功能了。

你可能感兴趣的:(iOS开发,问题解决方案)