2010-05-28 4 views
0

Проблема: Мое приложение должно работать на iPhone OS 3.0.Как использовать функциональность iPhone OS 3.2 в приложении iPhone OS 3.0?

Однако есть некоторые особенности iPhone OS 3.2, которые я действительно хочу использовать. Так же, как небольшое дополнение бесплатно. Но я не хочу прерывать свою пользовательскую базу, делая это.

Представьте, что вы iPhone OS 3.0, и кто-то дает вам книгу для чтения. В нем есть инструкции для iPhone OS 3.2. Вы этого не узнали. Ну так что ты делаешь? Сбой? Они должны быть скрыты, поэтому вам не надоедать.

Кто-то недавно написал на SO:

иметь в виду, что вы должны проверить версию на местах в коде источника , где вы хотели бы использовать новые функции и обеспечивают альтернативы старые версии os

Так как же я мог это сделать? Не будет ли Xcode выдавать предупреждения, когда он найдет материал, который не связан ни с чем где-либо? Могу ли я просто проверить версию ОС и динамически связать - как-то - с тем, что мне кажется круто?

ответ

4

Два общих способа обнаружения признаков: respondsToSelector и NSClassFromString. С их помощью вы можете определить, существует ли у старого класса новый метод или существует новый класс.

Например, 3.2 добавленные распознаватели жестов. Вы можете использовать либо один из этих методов, чтобы решить, если вы хотите добавить жест распознавателей к виду:

if ([myView respondsToSelector:@selector(addGestureRecognizer:)]) { 
    // assume gesture recognizers exist, create and add some 
} 

или

if (NSClassFromString(@"UIGestureRecognizer")) { 
    // assume gesture recognizers exist, create and use some 
} 

В обоих случаях, вы бы построить для 3.2, но используют только 3,2 функции если они обнаружены во время выполнения. Если вы создаете против 3.0, и все предупреждения появляются в местах, где вы правильно проверяете, то вам хорошо идти.

В случае 3.2 был добавлен новый процессор, поэтому либо создайте универсальный двоичный файл, либо создайте для старой архитектуры.

Кроме того, в некоторых случаях Apple обеспечивает поддержку для обнаружения версии. Хорошим примером этого является UI_USER_INTERFACE_IDIOM в UIDevice.h, где он вызывает respondsToSelector для вас.

+0

, но когда я это делаю, Xcode жалуется, что вызов метода использует неизвестный символ. с большим красным предупреждением. – dontWatchMyProfile

+0

Вы создаете против 3.2 SDK для нормального использования. Когда вы строите против 3.0 SDK, нужно только проверить, что все предупреждения отображаются в ожидаемых местах, места, которые вы можете достичь только после прохождения ответаSoSelector или NSClassFromString или что-то еще. – drawnonward

+0

Итак, когда я хочу, чтобы мое приложение запускалось на iPhone OS 3.0 (где мне нужно было бы строить для 3.0, верно?), Тогда мне пришлось бы жить с предупреждениями? – dontWatchMyProfile

4

В разделе iPad Programming Guide есть раздел, в котором говорится об этом «Добавление проверок времени выполнения для новых символов». В принципе, вы можете использовать NSClassFromString и instancesRespondToSelector:, чтобы определить, есть ли функциональность, и тогда приложение может действовать соответствующим образом.

Смежные вопросы