Похоже, отладчик XCode подшучивал над мной за последние пару часов.
Я работал с этим кодом, который - задним числом - довольно очевидная ошибка, но она не была очевидна в то время:
- (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 ... который заставил компилятор работать с ними отдельно?!
Может кто-нибудь пролить свет на это? Я сумасшедший, как я себя чувствую? Пожалуйста, скажите мне, что я неправ, и я могу вернуться к доверию отладчику.
Спасибо, извините за мини-разглагольствование.