В чем разница между #ifdef __IPHONE_3.2 и #if __IPHONE_3.2? - PullRequest
1 голос
/ 23 апреля 2010

У меня есть приложение для iphone, которое должно работать на 3.1.3 для iPhone и 3.2 для iPad. Это приложение для iPhone, которое я хочу работать на iPad.

Основным отличием является MPMoviePlayerController, который вводит / осуждает множество вещей в 3.2.

Поскольку iPhone OS поддерживает только 3.1.3, а iPad - 3.2, мне нужно разделить мой код, чтобы он компилировал только необходимый код для соответствующей ОС.

Я не могу использовать [[UIDevice currentDevice] модель], потому что я получаю устаревшие предупреждения в коде 3.1.3. Кроме того, UIUserInterfaceIdiomPad является новым в 3.2, поэтому он не работает с 3.1.3 ...

Итак, я решил использовать это, которое компилирует только то, что необходимо для конкретной ОС:

#if __IPHONE _3_2

//do 3.2 iPad stuff

#else

//do 3.1.3 iPhone/iPod Touch stuff

#endif

Мой вопрос ... В чем разница между ними?

#ifdef __IPHONE_3_2

и

#if __IPHONE_3_2

Спасибо

Ответы [ 3 ]

3 голосов
/ 23 апреля 2010

Вы не можете использовать проверки во время компиляции, чтобы проверять вещи, связанные со временем выполнения.Вы должны использовать -respondsToSelector: или макрос UIInterfaceIdiom().

Убедитесь, что вы установили связь с 3.2 SDK (что означает установить Base SDK на 3.2) и установите в качестве цели развертывания самую низкую версию iPhone OS, которую вы хотите поддерживать (кажется, 3.1.3).

Посмотрите на это: Представляем универсальные приложения для iPhone OS .

3 голосов
/ 23 апреля 2010

Строго говоря, #ifdef увидит, было ли __IPHONE_3_2 задано какое-либо значение, а #if __IPHONE_3_2 проверит конкретные значения.

В этом случае я бы использовал #ifdef __IPHONE_3_2, потому что вам нужно только проверить, существует ли значение.

(К вашему сведению, __IPHONE_3_2 определяется как значение 30200, если вам было интересно.)

0 голосов
/ 26 апреля 2010

Тестирование __IPHONE_3_2 - это единственный способ скомпилировать код на 3.1, который имеет символы 3.2, вам не хватает точки, полностью рекомендующей NSClassFromString () / responsedsToSelector: / UIInterfaceIdiom (), которые нельзя использовать, например, в определениях заголовков, ни решают ли они ошибки компоновки, они решают совершенно иную проблему.

...