2017-11-26 14 views
0

私はVuforia ExtensionでUnity 2017.2.0f3を使用しており、https://github.com/blitzagency/ios-unity5チュートリアルの後に現存するiOSプロジェクトにプロジェクトをインポートしました。現存するiOSプロジェクトには、Vuforiaを使用するARビューと、バーコードをスキャンできるネイティブiOS AVCaptureSessionとの間で切り替えられるビューが含まれていました。 com.apple.avfoundation.videodataoutput.bufferqueueキュー内AVCaptureSessionを使用したUnity Vuforia Extension EXC_BAD_ACCESS

EXC_BAD_ACCESS

:旧エラーなしで動作しますが、できるだけ早く私はsession.addInputまたはsession.addOutput後者の特徴がクラッシュをしようとして。 NSZombieを使ってメッセージの送信を試みたオブジェクトの種類について知りたいのですが、実際には物理デバイス上でしかアプリケーションを実行できないため、送信しようとしている実際のオブジェクトについて詳しく知ることができませんクラッシュの原因となるメッセージ

私の推論は、それがVuforiaがAVCaptureOutputAVCaptureInputで新しいAVCaptureSessionの私の創出によってトリガされ解放されVIdeoDataOutputバッファキューへの参照を永続化するとしなければならないかもしれないということです。難しいのは、それが第三者図書館であるため、実際にこれをどうやって確認するかわからないということです。 Objective-Cラッパーを持つ唯一のViewControllerはCameraCapture.mmと呼ばれますが、NSLogsまたはそのメソッドに入れたブレークポイントは呼び出されないので、これは唯一のユニークなView Controllerであるようです。上記のメソッドが呼び出されると

private func setupCamera() { 
    guard let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo), 
     let input = try? AVCaptureDeviceInput(device: device) else { 
      return 
    } 

    if session.canAddInput(input) { 
     session.addInputWithNoConnections(input) 
    } 

    previewLayer = AVCaptureVideoPreviewLayer(session: session) 
    previewLayer.frame = self.view.bounds 
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
    view.layer.addSublayer(previewLayer) 
    cameraPreviewView.layer.addSublayer(previewLayer) 
    let metadataOutput = AVCaptureMetadataOutput() 

    if session.canAddOutput(metadataOutput) { 
     session.addOutputWithNoConnections(metadataOutput) 

     metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 
     metadataOutput.metadataObjectTypes = metadataOutput.availableMetadataObjectTypes 
    } else { 
     print("Could not add metadata output") 
    } 
} 

は、さえ電撃チュートリアルappDelegate.stopUnity()からAppDelegate関数を呼び出した後、必ずアプリがクラッシュします。

答えて

0

基本的に私が得たエラーは、ユニティからのもので、バックグラウンドでは本当に終了しませんでした。これは、Unity自身のiOS Unityエクスポートに対して設定可能な設定です。編集>プレイヤー設定>に行き、右側のインスペクターでその他の設定のフィールドには、の動作があります。背景はです。私の元のエクスポートはに設定されていました。が停止しました。これにより、Unityが実行されていないときに、Unity/VuforiaのCameraへのAVCaptureSessionの組み込みがvideoOutputデリゲートバッファの観点からクリーンアップされませんでした。その結果、EXC_BAD_ACCESS Unityが止めて、新しいAVCaptureSessionを開始したと思った。だからの動作をバックグラウンドでから出口をに変更し、新しいAVCaptureSession()の入力/出力ペアの設定を行う前にappDelegate.stopUnity()と呼んでいたことを私のアプリで保証しました。

関連する問題