2012-04-21 76 views
9

我試圖從一個的NSMutableDictionary刪除對象後得到一個例外。相關的代碼如下。 'settings'傳遞給方法,可以是NSDictionary或NSMutableDictionary。從一個可變的字典中刪除的對象拋出一個異常

NSMutableDictionary *mutableSettings = nil; 
if ([settings isKindOfClass:[NSMutableDictionary class]]) 
    mutableSettings = (NSMutableDictionary *)settings; 
else 
    mutableSettings = [[[NSMutableDictionary alloc] initWithDictionary:settings] autorelease]; 

[mutableSettings removeObjectForKey:@"akey"]; 

此崩潰與

*終止應用程序由於未捕獲的異常 'NSInternalInconsistencyException',原因: ' - [__ NSCFDictionary removeObjectForKey:]:突變方法發送到不可變的對象'

請告訴我問題呢?謝謝。

回答

10

的問題在這裏是兩個NSDictionaryNSMutableDictionary返回__NSCFDictionary作爲他們class,由於事實NSDictionary是一類集羣。

我認爲你將不得不做出settings字典的可變副本是否爲可變的。

NSMutableDictionary *mutableSettings = [settings mutableCopy]; 
+3

此外,正如下劃線暗示的那樣,'__NSCFDictionary'是一個私有類。它不一定是唯一的字典類,它不能保證永遠都在。更貼切,它的NSMutableDictionary的一個子類,所以每* *字典(即__NSCFDictionary'的'實例)是一類的NSMutableDictionary的。所有這些都意味着沒有可靠的方法來判斷字典或任何其他plist對象是否可變。 – 2012-04-21 18:59:21

相關問題