私は、既存の iPhone/iPad プロジェクトを iPhoneOS 3.0 まで後方互換性を持たせることに取り組んでいます。
私の現在のテスト デバイスは、3.1.3 を搭載した iPod Touch です。
次のコードが問題を引き起こしています。
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 以降で定義されています。したがって、私は以前の OS バージョンを使用していることを期待Class gestureReconizer
してnil
おり、次の場合はスキップする必要があります。ただし、スキップしません。gestureRecognizer
ではないnil
場合、 内のコードが実行を開始し、次の理由if
でクラッシュします。leftSwipeRecognizer.direction
-[UISwipeGestureRecognizer setDirection:]: unrecognized selector sent to instance 0x1e5720
この状況はかなり混乱しています。私は本ですべてをやっていると思います。使用する前にクラスが存在するかどうかを確認しようとしますが、存在しないはずのクラスが存在し、テストをだまして、期待される仕様に準拠せず、クラッシュします。
もちろん、このクラッシュを回避するためにあちこちにいくつかのチェックを入れることrespondsToSelector
はできますが、それはエレガントな方法ではありません。
他の提案はありますか?