2012-07-20 57 views
0

遇到此錯誤的種類。發送到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

另外,這顯然是我的實際代碼的淡化版本。很確定,我已經包含了所有相關的內容,但如果需要,我可以發佈實際的代碼/目的。

感謝

+1

請注意,您可以爲異常設置斷點(在左窗格的斷點導航器中,單擊底部的+圖標)。這會讓你看到異常拋出的位置並獲得回溯。你會看到addObject:實際調用insertObject:atIndex:這又會拋出異常:) – Taum 2012-07-20 20:54:55

回答

4

NSUserDefaults不是定期收集。它不包含你給它的任何東西。 -[NSUserDefaults objectForKey:]將始終讓您返回適當類型的不可變對象。

+0

瞭解,謝謝。當它讓我時,我會給你一個很好的綠色複選標記。 :] – Doug 2012-07-20 20:45:07

相關問題