它肯定好像Xcode調試已經打使壞對我的最後幾個小時。困惑調試不一致之處[一個NSBundle mainBundle]
我這個代碼,有工作 - 在事後 - 一個很明顯的錯誤,但它並不明顯的時候:
- (UIImage*)loadBundleImage:(NSString*)imageName {
NSBundle* bundle = [NSBundle mainBundle];
NSString* path = [bundle bundlePath];
path = [path stringByAppendingFormat:@"%@/%@", path, imageName];
return [UIImage imageWithContentsOfFile:path];
}
我用調試器單步執行代碼,它一直說在[NSBundle mainBundle]調用之後bundle沒有。這導致我爲什麼可能會搜索高和低,並試圖修復即的問題。最後,我發現了實際的錯誤(這是我追加路徑的兩次),所以我決定做一些試驗......顯然,捆綁不是零,那麼爲什麼調試器說它是?當通過步進這個代碼,調試器正確顯示束值的mainBundle調用後:
- (UIImage*)loadBundleImage:(NSString*)imageName {
NSBundle* bundle = [NSBundle mainBundle];
if (bundle == nil) {
NSLog(@"Nil bundle");
}
NSString* path = [bundle bundlePath];
path = [path stringByAppendingFormat:@"/%@",imageName];
return [UIImage imageWithContentsOfFile:path];
}
那麼,是什麼在這裏給?這是調試器的錯誤嗎?我唯一的猜測是,編譯器正在優化連續調用mainBundle和bundlePath進入某種原子操作,所以調試器不會「看到」發生了什麼...但是當我打破這兩個調用與if-block一起......迫使編譯器分別處理它們?!
任何人都可以對此有所瞭解嗎?我覺得我瘋了嗎?請告訴我,我錯了,我可以回去信任調試器。
謝謝,抱歉,迷你咆哮,那裏。
嗨,你可能是正確的關於優化。這是一個調試版本,對吧?你爲目標的GCC_OPTIMIZATION_LEVEL設置了什麼? – 2009-09-20 08:20:08
你應該改變你的評論給答案,所以我可以給你信貸。果然,我有發佈檢查,而不是調試(不知道爲什麼 - 可能只是我愚弄,忘記把東西回來)。調試器現在能夠正確調試問題代碼。我肯定很難學習這個iPhone的東西。謝謝!! – Rob
要構建路徑,您應該使用-stringByAppendingPathComponent:而不是使用-stringWithFormat:手動構建路徑。 –