Ответ 1
Причина в том, что Apple забыла круглые скобки:
#define YES (BOOL)1
Это будет исправлено в iOS 6 SDK:
#define YES ((BOOL)1)
Тем временем вы должны ввести @(YES)
.
Новый Xcode 4.4 отсутствует, и он должен поддерживать литералы, такие как
@42
@"String"
@23.0L
@{ @"key" : obj }
и @[obj1, obj2]
и он также должен поддерживать @YES
и @NO
, который не работает при настройке последней версии iOS 5 (и предшествующей).
После компиляции вы увидите сообщение об ошибке:
Неожиданное имя типа "BOOL": ожидаемое выражение
Я знаю, что вы можете исправить это, набрав @(YES)
и @(NO)
. Но я хочу знать, почему он работает не так, как ожидалось.
Причина в том, что Apple забыла круглые скобки:
#define YES (BOOL)1
Это будет исправлено в iOS 6 SDK:
#define YES ((BOOL)1)
Тем временем вы должны ввести @(YES)
.
Это полезно для информации о литералах.
В комментариях к этот ответ также указывается:
Есть одна небольшая вещь, о которой я хотел бы предупредить. Литературные блаты также не поддерживаются из-за этого. Тем не менее, быстрое исправление, которое я реализовал, заключалось в добавлении это к началу одного из моих общих заголовков (в проекте iOS)
#ifndef __IPHONE_6_0 #if __has_feature(objc_bool) #undef YES #undef NO #define YES __objc_yes #define NO __objc_no #endif #endif
@Ответ phix23s кажется более точным. Вы должны принять это.
Это было полезно добавить из комментариев:
Следует отметить, что это необходимо сделать после #import. Если вы помещаете эти #defines в свой Prefix.pch, они должны обязательно импортировать Foundation раньше в pch