遇到此錯誤的種類。發送到Immutable對象的突變方法 - 在哪裏?
非常基本的錯誤
2012-07-20 12:44:07.462 Picsilk[4286:17903] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
我知道這意味着什麼地方在我的代碼我試圖對象插入到一個NSArray而不是一個NSMutableArray。
但是,我沒有在我的應用程序中使用方法insertObject:atIndex:
-anywhere-。
說真的,我在我的項目中搜索了所有文件的「插入」並且什麼也沒有發現。
做一些搜索斷點後,我發現這個問題似乎出現,當我使用ADDOBJECT存儲一個NSMutableDictionary
對象,其中包含在NSUserDefaults standardUserDefaults
對象
NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
if(![userDef objectForKey:@"somekey"])
[userDef setObject:[[NSMutableArray alloc] init] forKey:@"somekey"];
NSMutableDictionary *data = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"somehtmlstring", @"someid", nil] forKeys:[NSArray arrayWithObjects:@"data",@"id", nil ]];
[[userDef objectForKey:@"somekey"] addObject:data ];
錯誤的NSMutableArray
對象發生在最後一行。但很確定,一切都是可變的。我是不是應該這樣使用NSUserDefaults
?
另外,這顯然是我的實際代碼的淡化版本。很確定,我已經包含了所有相關的內容,但如果需要,我可以發佈實際的代碼/目的。
感謝
請注意,您可以爲異常設置斷點(在左窗格的斷點導航器中,單擊底部的+圖標)。這會讓你看到異常拋出的位置並獲得回溯。你會看到addObject:實際調用insertObject:atIndex:這又會拋出異常:) – Taum 2012-07-20 20:54:55