Другими словами, используйте литералы, но предназначенные для iOS 5.
Я знаю этот, но этот пост не является окончательным.
Другими словами, используйте литералы, но предназначенные для iOS 5.
Я знаю этот, но этот пост не является окончательным.
Вы можете отключить компилятор, но он не работает, как вы могли подумать (я попробовал это сейчас). Существует несколько требований к компиляции SDK для использования этого нового синтаксиса (т.е. Он будет работать на предыдущих версиях iOS, но вам нужно скомпилировать его с помощью iOS 6.0 SDK). Я не думаю, что мне разрешено обсуждать их здесь в данный момент, но они подробно освещены в видео "Modern Objective-C" WWDC 2012.
В принципе, у вас будет синтаксис, но библиотеки не будут знать, как реагировать на него.
Существует альтернативная теория, хотя... что я просто не сделал это правильно ^^;
В конце концов, вы не имеете, чтобы использовать 4.3 для развертывания в приложениях 5.x. Таким образом, мое предложение - это просто обновление, на самом деле нет недостатка в нем (если вы не будете развертывать приложение в ближайшее время, но в этом случае просто перепутайте все, поскольку я предполагаю, что вы почти закончили).
РЕДАКТИРОВАТЬ (через 2 месяца теперь открыт iOS 6). Вы можете определенно использовать категории, чтобы обойти требования SDK нового синтаксиса objective-c. Добавьте категории в NSArray
и NSDictionary
для - (id)objectAtIndexedSubscript:(NSUInteger)idx
и - (id)objectForKeyedSubscript:(id)key
соответственно, которые возвращают objectAtIndex:
и objectForKey:
(это то, что они делают в любом случае в iOS 6). Также для NSMutableArray
и NSMutableDictionary
добавьте методы категорий для - (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index
и - (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index
соответственно, которые просто добавят объект, если он еще не существует, и замените его, если это произойдет.
Один улов: определения YES
и NO
изменены в iOS 6 для размещения булевых литералов для NSNumber
. Поэтому вам нужно сделать следующее:
#if __has_feature(objc_bool)
#undef YES //Before it was (BOOL)1
#undef NO //Before it was (BOOL)0
#define YES __objc_yes
#define NO __objc_no
#endif
Причина в том, что в новом синтаксисе уже есть определение синтаксиса @( ... )
(вложенные в ящик выражения), и старое определение будет разрешено @(BOOL)1
, которое является ошибкой.