Проверять функцию / класс в версии ОС? - PullRequest
0 голосов
/ 08 августа 2011

Я занимаюсь разработкой приложения, которое хочу запустить как на iOS4, так и на iOS5, но для пользователей iOS5 я хочу использовать функцию iOS5 как часть интерфейса (пользователи iOS4 получат что-то менее интересное).У меня вопрос, какова процедура проверки доступности конкретной ОС на устройстве.Насколько я понимаю, я проверяю не версию ОС, а наличие определенного класса. Может ли кто-нибудь помочь мне найти лучший способ сделать это ...

Ответы [ 4 ]

4 голосов
/ 08 августа 2011

Разве iOS 5 не под NDA?

В любом случае, чтобы проверить, существует ли функция, попробуйте следующее:

if (NSClassFromString(@"UIStepper")) {
    //enter code here
} else {
    //enter code here
}

Настройка в соответствии с вашими потребностями.

РЕДАКТИРОВАТЬ: iOS 5 теперь выпущен, так что теперь я могу добавить «UIStepper» в мой код.

2 голосов
/ 29 мая 2012

Если вы пытаетесь изящно ухудшить UIStepper в 4.x, вы не можете использовать только

if( NSClassFromString(@"UIStepper") )

Вместо этого вы также должны проверить, есть ли специфичный для UIStepper селектор, имеющий ответ.Как сказал Гарри Вуд в комментарии под Bo A, хороший способ сделать это:

if( NSClassFromString(@"UIStepper") && [theStepper respondsToSelector:@selector(setValue:)] )

Это решило проблему с моим приложением, зависшим под iOS 4.x.

Harry Woodпомог мне решить проблему, с которой я столкнулся, и хотел бы, чтобы он получил кредит.

2 голосов
/ 08 августа 2011

iOS5 находится под NDA, поэтому я не буду упоминать какие-либо новые классы, которые могут существовать или не существовать.Однако следующий код должен делать то, что вы хотите.Он взят из docs .

if ([UINewClass class]) {
    // Create an instance of the class and use it.

} else {
    // Alternate code path to follow when the
    // class is not available.

}

. Используется слабое связывание и, следовательно, требуется, чтобы новый класс (UINewClass) был в SDK, который вы используете для компиляции.Это относительно новая функция, представленная в iOS 4.2, и может поддерживаться не всеми фреймворками.Обходной путь - использовать старый стиль (по той же ссылке, что и выше):

Class cls = NSClassFromString (@"UINewClass");
if (cls) {
    // Create an instance of the class and use it.
} else {
    // Alternate code path to follow when the
    // class is not available.
}
2 голосов
/ 08 августа 2011
Class stepperClass = NSClassFromString(@"UIStepper");
if (stepperClass) {
    // class is available, use it
} else {
    // class not available, don't use it or use something else
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...