UIGestureRecognizer падает на <OS3.2
Этого и следовало ожидать, но я не могу найти среду выполнения, которая работает должным образом, поскольку кажется, что раньше это был частный API!!!!
На данный момент у меня и OS3.1.3 отвечает на селектор addGestureRecognizer!!!!
if ( [self.view respondsToSelector:@selector(addGestureRecognizer:)] ) {
UIGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(morePress)];
[self.view addGestureRecognizer:recognizer];
recognizer.delegate = self;
[recognizer release];
}
3 ответа
Вы должны проверить версию системы явно:
NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
if([currentSystemVersion compare:@"3.2"] == NSOrderedAscending) {
//add gesture recognizer
} else {
// :(
}
UIGestureRecognizer не поддерживается до iOS 3.2. Даже если метод addGestureRecognizer:
существует, это не значит, что это безопасно для использования.
Это был действительно приватный API, который не поддерживается в версиях до 3.2.
Док Apple говорит:
Чтобы определить во время выполнения, можете ли вы использовать распознаватели жестов в своем приложении, проверьте, существует ли класс, и, если он есть, выделите экземпляр и посмотрите, отвечает ли он селектору locationInView:. Этот метод не был добавлен в класс до iOS 3.2.
Образец кода:
UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];
if (![gestureRecognizer respondsToSelector:@selector(locationInView:)]) {
[gestureRecognizer release];
gestureRecognizer = nil;
}
// do something else if gestureRecognizer is nil
Explenation:
Чтобы определить, доступен ли класс во время выполнения в данной версии iOS, вы обычно проверяете, является ли класс нулевым. К сожалению, этот тест не совсем точен для UIGestureRecognizer. Хотя этот класс был общедоступным, начиная с iOS 3.2, он находился в разработке незадолго до этого. Хотя класс существует в более раннем выпуске, его использование и другие классы распознавания жестов не поддерживаются в этом более раннем выпуске. Вы не должны пытаться использовать экземпляры этих классов.
Проверьте полный текст здесь.