眼見不必定爲實

在解析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方法。

相關文章
相關標籤/搜索