2011-01-23 1 views
1

3 OSと私のiPod touchをクラッシュし、それはまだこのメッセージに私のiPod touch(iOSの3.1.3)のクラッシュ:AVCaptureDeviceは、私がAVCaptureDeviceをチェックするために私のアプリでは、いくつかの条件付きのコーディングを行わ

dyldの:シンボルではありません見つかった:_OBJC_CLASS _ $ _ AVCaptureDeviceから参照

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

に期待

:/システム/ライブラリ/フレームワーク/ AVFoundation。フレームワーク/ AVファウンデーション

データフォーマッタは一時的に利用できず、「続行」後に再試行されます。 (現時点で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を新しいライブラリにリンクすることはできないと推測しています。どうすれば修正できますか?

答えて

1

まず、プリプロセッサディレクティブを使用して、ここで実行するコードを選択することはできません。コンパイル時ではなく、実行時にチェックが行われる必要があります。したがって、これを行うには、NSClassFromString(),-respondsToSelector:などの技術を使用する必要があります。

第2に、このコンパイルを行うには、コンパイラをLLVM GCC as described by Marco Armentに変更します。

+0

古いOSのバージョンと互換性のあるアプリケーションを作成するために別のコンパイラを使用する必要があるのは奇妙です。これは唯一の方法ですか? – TigerCoding

+0

いつも働いていた 'NSClassFromString'テクニックを使うこともできます。ちょっと面倒です。そして、LLVMは、コンパイラ(と将来)の方が優れているので、今すぐ切り替えることもできます。 –

+0

NSClassFromStringを試しても、エラーが発生します。id cls =(NSClassFromString(@ "AVCaptureDevice")); if(cls!= nil){// ...私はターゲットをきれいにし、デバイスからアプリケーションを削除して実行しましたが、同じ問題が引き続き発生します。アプリの開始時にこのチェックを行い、後でアプリで使用できないようにフラグを設定します。しかし、私のNSLogのステートメントは、このチェックに至ることさえありません。 – TigerCoding

1

AVCaptureDeviceは、iOSバージョン4以上でのみ使用できます。あなたは、2つのオプションがあります。

  1. システムのバージョンを確認し、適切なものを扱う:クラスavailablilityため

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."); 
} 

+0

上記の両方の文章を試してみましたが、どちらも同じエラーが表示されます。 – TigerCoding

2

はチェックしてみAVfoundation.frameworkがフレームワークに追加されました
私の意見では、それはエラーの可能性が最も高い理由です

関連する問題