iOS 3.1.3中的UIGestureRecognitor?

iOS 3.1.3中的UIGestureRecognitor?,ios,iphone-sdk-3.0,uigesturerecognizer,universal-binary,Ios,Iphone Sdk 3.0,Uigesturerecognizer,Universal Binary,我正在努力使现有的iPhone/iPad项目向后兼容到iPhoneOS3.0 我目前的测试设备是一个3.1.3版本的iPodtouch 以下代码位导致了问题: Class gestureRecognizer = NSClassFromString(@"UISwipeGestureRecognizer"); if (gestureRecognizer != nil) { UISwipeGestureRecognizer * leftSwipeRecognizer = [[UISwipe

我正在努力使现有的iPhone/iPad项目向后兼容到iPhoneOS3.0

我目前的测试设备是一个3.1.3版本的iPodtouch

以下代码位导致了问题:

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;
}
根据苹果的文档,UIgestureRecognitor是从iOS 3.2开始定义的。因此,我希望在以前的操作系统版本中,
Class-gestureReconizer
nil
,并跳过以下内容。但是它不会跳过
GestureRecognitor
不是
nil
,如果
中的代码开始执行,并在
左侧SwipRecogniter.direction
处崩溃,原因是:

-[UISwipeGestureRecognizer setDirection:]: unrecognized selector sent to instance 0x1e5720
这种情况很令人困惑。我想我做的一切都是按部就班的。我尝试在使用某个类之前检查它是否存在,但是该类不应该存在,存在,愚弄了我的测试,不符合预期的规范,并且崩溃

当然,我可以在这里和那里放置一些
respondsToSelector
检查来解决这个崩溃,但这不是一个优雅的方法


还有其他建议吗?

根据UIgestureRecognitor类参考,在下,您确实需要在检查类是否存在后对选择器进行额外的响应检查

这直接来自文档:

确定类是否为 在给定的iOS中运行时可用 发布时,您通常会检查 这门课零分。不幸的是 该测试对测试结果不完全准确 手势识别器。虽然这 该类在开始时是公开的 iOS 3.2正处于开发阶段 在此之前很短的一段时间。虽然 该类存在于早期版本中 发布、使用it和其他 不支持手势识别器类 在早期版本中受支持。你 不应尝试使用的实例 那些课

在运行时确定 可以在您的应用程序中使用手势识别器 应用程序,测试类是否 存在,如果存在,则分配一个 实例,查看是否有响应 到选择器位置查看:。这 方法未添加到类中 直到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