Я работаю над созданием существующего проекта iPhone / iPad, обратно совместимого с iPhoneOS 3.0.
Моим текущим тестовым устройством является iPod Touch с 3.1.3.
Следующий бит кода вызывает проблемы:
Class gestureRecognizer = NSClassFromString(@"UISwipeGestureRecognizer");
if (gestureRecognizer != nil)
{
UISwipeGestureRecognizer * leftSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(didSwipeLeft:)];
leftSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
leftSwipeRecognizer.delegate = self;
[self.view addGestureRecognizer:leftSwipeRecognizer];
_leftSwipeRecognizer = leftSwipeRecognizer;
}
Согласно документации Apple, UIGestureRecognizer определяется начиная с iOS 3.2. Поэтому я ожидаю, что Class gestureReconizer
будет nil
в предыдущей версии ОС и что следующее, если будет пропущено. Однако это не пропускает. gestureRecognizer
не nil
, код внутри if
начинает выполняться и падает на leftSwipeRecognizer.direction
, потому что:
-[UISwipeGestureRecognizer setDirection:]: unrecognized selector sent to instance 0x1e5720
Эта ситуация довольно запутанная. Я думаю, я делаю все по книге. Я пытаюсь проверить, существует ли класс, прежде чем я его использую, однако класс, которого там быть не должно, присутствует, обманывает мой тест, не соответствует его ожидаемым спецификациям и вылетает.
Я мог бы, конечно, поставить несколько respondsToSelector
проверок тут и там, чтобы обойти эту аварию, но это не будет элегантным способом сделать это.
Есть еще предложения?