AVCaptureDevice продолжает сбивать мой iPod Touch с ОС 3 - PullRequest
1 голос
/ 23 января 2011

Я сделал условное кодирование в своем приложении для проверки 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 ]

2 голосов
/ 24 января 2011

Попробуйте проверить, добавили ли вы AVfoundation.framework в свои фреймворки
На мой взгляд, это наиболее вероятная причина ошибки

1 голос
/ 23 января 2011

AVCaptureDevice доступно только на iOS версии 4 и выше. У вас есть два варианта:

  1. Проверьте версию системы и действуйте соответствующим образом:

UIDevice *device = [UIDevice currentDevice];
if([device.systemVersion floatValue]
    NSLog(@"Not supported on this software version");
}else{

//Proceed Normally
}

  1. Проверка доступности класса:


Class avcaptureclass = (NSClassFromString(@"AVCaptureDevice"));

if (avCaptureClass != nil){
    //Proceed Normally
}else{
    NSLog(@"Not supported on this software version.");
}

1 голос
/ 23 января 2011

Во-первых, вы не можете использовать директивы препроцессора, чтобы выбрать, какой код здесь запускать.Проверка должна выполняться во время выполнения, а не во время компиляции.Поэтому вы должны использовать NSClassFromString(), -respondsToSelector: или аналогичные методы для этого.

Во-вторых, чтобы сделать этот компилятор, измените свой компилятор на LLVM GCC , как описано Marco Arment .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...