我正在關注Beginning iPhone 3 Development的示例。在第8章中,我在代碼中犯了一個錯誤。Objective C調試
- (NSMutableDictionary *)mutableDeepCopy
{
NSMutableDictionary * ret = [[NSMutableDictionary alloc] initWithCapacity:[self count]];
NSArray * keys = [self allKeys];
for (id key in keys) {
id oneValue = [self valueForKey:key];
id oneCopy = nil;
if ([oneValue respondsToSelector:@selector(mutableDeepCopy)])
oneCopy = [oneValue mutableDeepCopy];
else if ([oneValue respondsToSelector:@selector(mutableCopy)])
oneCopy = [oneValue mutableCopy];
if (oneCopy == nil)
oneCopy = [oneValue copy];
[ret setValue:oneCopy forKey: key];
}
return ret;
}
在第二responseToSelector,而不是以上的mutableCopy,我已經誤寫它作爲mutableDeepCopy。因此,我從常規數組創建可變數組失敗了一個簡單的副本。
結果控制檯將打印這樣的錯誤消息:
2010-02-04 19:58:28.381段[1806:20B] * WebKit的丟棄在web視圖未捕獲的異常:shouldInsertText:replacingDOMRange: givenAction:delegate:* - [NSCFArray removeObjectAtIndex:]:發送給不可變對象的變異方法
現在我的問題是,如果我正在編寫自己的代碼而不是從書。我怎麼知道這個「發送給不可變對象的變異方法」在哪一行發生?
當我在調試器中看不到任何東西時會發生什麼?是否因爲缺少調試符號?我如何添加它們? – huggie 2010-03-21 09:38:19
這可能是因爲您沒有設置任何斷點或者因爲您目前沒有在斷點處停止。試着在你知道被調用的一些代碼開始時設置一個斷點,看看它應該是什麼樣子。 – kubi 2010-03-21 14:55:11