Почему проверка UIGestureRecognizer находит его в iPhone OS 3.0, когда он был представлен в 3.2?

Я впервые использую UIGestureRecognizer и хочу, чтобы мое приложение работало на iOS 3.0 и более поздних версиях. Поскольку Apple четко заявляет, что библиотека доступна в iOS 3.2 и более поздних версиях, я использовал следующий код:

// Make sure that Gesture recognition technology is supportted by the device SDK version
if ([UIGestureRecognizer instancesRespondToSelector:@selector(initWithTarget:action:)])
{
    [self initGestureRecognizers];
}

Удивительно, но когда я запускаю приложение на единственной цели, которая у меня есть, которая запускает SDK3.0, оно работает нормально.


Я заменил условие на следующее:

if ([[[UIDevice currentDevice] systemVersion] compare:@"3.2"] != NSOrderedAscending) 
{ 
    [self initGestureRecognizers]; 
}

Я хотел бы получить комментарии по этому поводу.

Спасибо


person Tzur Gazit    schedule 12.09.2010    source источник
comment
zomg Мне нравится название этого вопроса   -  person MooGoo    schedule 12.09.2010
comment
Вы тестируете на реальном устройстве с 3.0 или на симуляторе? И... распознаватели работают или код пропускается?   -  person Eiko    schedule 12.09.2010
comment
Привет, Эйко, я тестирую устройство, и распознаватели действительно работают.   -  person Tzur Gazit    schedule 12.09.2010
comment
Название может быть забавным, но иметь значимую тему важно как для людей, пытающихся помочь, так и для будущих людей, которые ищут связанную или идентичную проблему.   -  person Nick    schedule 13.09.2010
comment
Извините, что испортил удовольствие, но вопрос действительно нуждался в более описательном названии.   -  person Brad Larson    schedule 14.09.2010
comment
Я не смог найти лучшего способа проверить совместимость/доступность UIGestureRecognizer, чем проверка, реализованная Tzur.   -  person Jessedc    schedule 03.10.2010


Ответы (2)


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

person Johan Kool    schedule 12.09.2010
comment
Это именно так. Я также заметил, что UIGestureRecognizer и некоторые конкретные классы, такие как UITapGestureRecognizer (IIRC), существуют в версии 3.0, но считаются частными для Apple, то есть не могут использоваться приложениями. Они не реализуют все, что сейчас задокументировано, т.е. грамм. Я думаю, что в UITapGestureRecognizer не было собственности numberOfTapsRequired. - person DarkDust; 12.09.2010
comment
Следующее, кажется, работает нормально. Как вы думаете? if ([[[UIDevice currentDevice] systemVersion] compare:@3.2] != NSOrderedAscending) { [self initGestureRecognizers]; } - person Tzur Gazit; 12.09.2010

В каждом выпуске iOS есть множество недокументированных API, и Apple упоминает об этом. Однако использование этих недокументированных API является основанием для отказа магазина приложений. Вполне может возникнуть риск отказа от использования API, который не задокументирован в одном данном выпуске/ревизии ОС, но задокументирован в другом, оба из которых поддерживаются вашим приложением.

person hotpaw2    schedule 12.09.2010