AVCaptureDevice一直让我的iPod Touch与OS 3崩溃

时间:2011-01-23 12:31:39

标签: iphone iphone-sdk-3.0 ios4

我在我的应用程序中进行了一些条件编码以检查AVCaptureDevice,但它仍然使用以下消息使我的iPod Touch(iOS 3.1.3)崩溃:

dyld:未找到符号:_OBJC_CLASS _ $ _ AVCaptureDevice

引用自:/var/mobile/Applications/4286D40F-9E33-49AB-9AD9-4F66EB9331A5/TestApp.app/TestApp

预期于:/System/Library/Frameworks/AVFoundation.framework/AVFoundation

数据格式化程序暂时不可用,将在“继续”后重试。 (此时打电话给dlopen是不安全的。)

mi_cmd_stack_list_frames:堆栈中没有足够的帧。

mi_cmd_stack_list_frames:堆栈中没有足够的帧。

在我的代码中,我做了这样的条件检查:

#if (!TARGET_IPHONE_SIMULATOR)
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000 // __IPHONE_4_0
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    // ... more code
#endif
#endif

我正在检查此处和使用AVCaptureDevice的代码中的另一个地方是否具有相同的条件。

我猜测旧的iOS版iPod无法链接到较新的库,所以我该如何更正呢?

3 个答案:

答案 0 :(得分:2)

尝试检查是否已将AVfoundation.framework添加到您的框架中 在我看来,这是错误的最可能原因

答案 1 :(得分:1)

首先,您不能使用预处理程序指令来选择在此处运行的代码。检查必须在运行时进行,而不是在编译时进行。因此,您必须使用NSClassFromString()-respondsToSelector:或类似技术来执行此操作。

其次,要进行此编译,请将编译器更改为LLVM GCC as described by Marco Arment

答案 2 :(得分:1)

AVCaptureDevice仅适用于iOS 4及更高版本。您有两种选择:

  1. 检查系统版本并妥善处理:
  2. 
    UIDevice *device = [UIDevice currentDevice];
    if([device.systemVersion floatValue]
        NSLog(@"Not supported on this software version");
    }else{
    
    //Proceed Normally
    }
    
    
    1. 检查课程可用性:
    2. 
      
      Class avcaptureclass = (NSClassFromString(@"AVCaptureDevice"));
      
      if (avCaptureClass != nil){
          //Proceed Normally
      }else{
          NSLog(@"Not supported on this software version.");
      }