2017-05-31 10 views
0

このiOSアプリケーションは、カメラの画像をマスターディテールアプリの詳細ビューに配置します。アプリがインストールされ、写真撮影の操作が初めて要求されると、アプリがクラッシュします。コードに見られるように、アクセスが要求され、ユーザーにアクセスを要求するアラートが表示されます。完了ハンドラが成功を報告すると、アプリケーションがクラッシュします。再インストールせずにアプリを再起動すると、カメラは正常に動作し続けます。 iPhoneからアプリケーションを削除して再インストールすると、常に同じ結果が得られます。カメラアクセス要求は失敗しますが、初めてカメラにアクセスしたときのみSwift 3

コンソール出力: AVAuthorizationStatusは未定義です。
ユーザーに許可が与えられました。
libC++ abi.dylib:NSExceptionタイプのキャッチされていない例外で終了する

助けてください。 iOS 10、Xcode 8、Swift 3

編集:AVCaptureRequestでクラッシュします。私がAVCaptureRequestをコメントアウトすると、アプリケーションはクラッシュしません(もちろん写真はありません)。

@IBAction func takeDrugPhoto(_ sender: UIButton) { 


    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { 

     let authStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo) 

     switch authStatus { 

     case AVAuthorizationStatus.authorized: 
      print("AVAuthorizationStatus is Authorized") 

.....ここにコードの束......

 case AVAuthorizationStatus.denied: 
      print("AVAuthorizationStatus is Denied") 

.....ここにいくつかのコード.....

 case AVAuthorizationStatus.notDetermined: 
      print("AVAuthorizationStatus is NotDetermined") 


      AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo, completionHandler: { (success) in 

       if success { 
        print("The user granted permission") 

       } else { 
        print("put up an alert telling the user the camera is not available") 

        DispatchQueue.main.async(execute: {() -> Void in 
         let ac = UIAlertController(title: "Camera Error", message: "For some reason, the camera in this device is not accepting your authorization. Check with your device supplier.", preferredStyle: .alert) 
         ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) 
         self.present(ac, animated: true, completion: nil) 
        })//back on main queue block 
       }//if success 

      })//requestAccessForMediaType block 


     }//switch 

    } else {//if device has a camera 

     let ac = UIAlertController(title: "Source not available.", message: "The camera is not available.", preferredStyle: .alert) 
     ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) 
     present(ac, animated: true, completion: nil) 

    }//if camera is no else 

}//takeDrugPhoto 

からトレース:

+0

コードのどの部分でクラッシュしますか?そして上記の例外 –

+0

情報のスタックトレースを提供してください。 – user2698617

+0

'Info.plist'の' Privacy - Camera Usage Description'キーの値を追加しましたか? –

答えて

0

AVCaptureDevice.requestAccessリクエストでユーザの許可を求めると、iOSは作成したメッセージをinfo.plistに組み込んだ警告ダイアログを表示します。ユーザーが許可を与えると、iOSはそのアプリをバックグラウンドから戻ってきたかのように扱います(消えていなくても)。それが私の問題でした。私は、セキュリティの一部としてバックグラウンドから復帰するたびにアクティブ化するログインシーケンスを構築しました。私はテストのためにそのインターフェースを無効にしました - したがって、失敗。私は他の人がこれを役に立つと願っています。

関連する問題