在解析JSON時候,不少人會將解析後的數據賦給NSDictionary,經過key值取到相應的value。數組
有時候咱們會對數據進行增刪。spa
面對要刪除某一個key下的數據,第一反應是使用可變字典,將解析後的數據賦給其,但在使用過程當中發現,執行removeObjectForKey方法後,程序不斷崩潰。code
但在正常使用中卻沒有任何失誤,依然能夠使用其餘方法,進行取key或者value,這種狀況讓人實屬迷惑。仔細閱讀一下報錯信息。blog
查看下輸出的崩潰信息是rem
terminate_handler unexpectedly threw an exception
因而使用異常捕獲來查看下問題所在,咱們將removeObjectForKey方法放到@try中it
@try { } @catch (NSException *exception) { NSLog(@"%@",exception); } @finally { NSLog(@"end"); }
輸出的exception爲:io
[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object
沒法在不可變數組上執行removeObjectForKey方法。table
原來咱們使用了可變字典來接受解析後JSON,雖然能夠正常使用,但仍是有一些問題。class
隨即發現,設置的可變字典只是表面上看着是可變的,實則是不可變字典。咱們將代碼進行小小的改動,將不可變字典轉換成可變字典,便可進行刪除數據的目的。object
+ (instancetype)dictionaryWithDictionary:(NSDictionary *)dict;
這樣便可正常的執行remove方法。