我正在努力使现有的 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
检查来解决这个崩溃问题,但这不是一种优雅的方式。
还有其他建议吗?