【发布时间】:2011-02-26 12:06:10
【问题描述】:
我正在努力使现有的 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 检查来解决这个崩溃问题,但这不是一个优雅的方法。
还有其他建议吗?
【问题讨论】:
标签: ios iphone-sdk-3.0 uigesturerecognizer universal-binary