2016-04-15 2 views
0

Мальчик, я чувствую себя глупо. Вот вопрос программирования, который я просто не могу понять.BOOL vs bool in iOS

BOOL MOMisCompatible = [self.objectModel isConfiguration:nil compatibleWithStoreMetadata:existingPersistentStoreMetadata]; 

    NSLog(@"%d", (unsigned)MOMisCompatible); // A 

    if(MOMisCompatible){ 
     NSLog(@"The MOM is compatible."); // B 
    } 
    else{ 
     NSLog(@"ARGH! The MOM is incompatible."); // C 
    } 

NSLog выводит 1 или 0 в точке A, как ожидалось. Но ни B, ни C не выводят ничего. Я отлаживаю, поставив точку останова на A, но код никогда не падает в A или B. Что мне не хватает?

+1

Хммм; это не имеет смысла. Вы уверены, что это настоящий код? – trojanfoe

+0

У меня было это когда-то, что точка останова не попала, хотя журнал был напечатан. Проверьте, не включил ли файл '.m' где-нибудь вместо' .h'-File. – dasdom

+0

[This] (http://stackoverflow.com/questions/541289/objective-c-bool-vs-bool) ответ объясняет это наилучшим образом. – Sam92

ответ

1

Возможно, что-то связано с их typedef, «BOOL» является подписанным символом, а его заголовок является objc.h, «bool», с другой стороны, является int с заголовком stdbool.h. Таким образом, когда вы пытаетесь отдать его (без знака), он фактически работает

+0

Это не имеет смысла. Если значение печатает '0' или' 1', операторы 'if' должны работать независимо от их типа. – trojanfoe

+0

это символ typedef, подписанный для NOT arm64, и он не может остановить отладчик – Injectios