2017-07-30 83 views
0

它看起來像didFinishPickingMediaWithInfo功能是怎麼回事無限循環,並最終與在控制檯發出錯誤崩潰:didFinishPickingMediaWithInfo功能那張無限循環

警告:無法執行支持代碼讀取目標-C過程中的類數據。這可能會降低可用類型信息的質量。

當我錄製視頻並按下選擇按鈕時,它會因爲它調用didFinishPickingMediaWithInfo而崩潰。以下是相關代碼:

let imagePicker: UIImagePickerController! = UIImagePickerController() 
let saveFileName = "/test.mp4" 

      if (UIImagePickerController.isSourceTypeAvailable(.camera)) { 
     if UIImagePickerController.availableCaptureModes(for: .rear) != nil { 

      //if the camera is available, and if the rear camera is available, the let the image picker do this 
      imagePicker.sourceType = .camera 
      imagePicker.mediaTypes = [kUTTypeMovie as String] 
      imagePicker.allowsEditing = false 
      imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate 
      imagePicker.videoMaximumDuration = 60 
      imagePicker.videoQuality = .typeIFrame1280x720 
      present(imagePicker, animated: true, completion: nil) 
     } else { 
      postAlert("Rear camera doesn't exist", message: "Application cannot access the camera.") 
     } 
    } else { 
     postAlert("Camera inaccessable", message: "Application cannot access the camera.") 
    } 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    print(123) 
    imagePickerController(imagePicker, didFinishPickingMediaWithInfo: [saveFileName : kUTTypeMovie]) 

    let videoURL = info[UIImagePickerControllerReferenceURL] as? NSURL 
    print("\(String(describing: videoURL))") 
    guard let path = videoURL?.path else { return } 
    let videoName = path.lastPathComponent 
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
    let documentDirectory = paths.first as String! 
    let localPath = documentDirectory! + "/" + videoName 
    guard let imageData = NSData(contentsOfFile: localPath) else { return } 
    let image = UIImage(data: imageData as Data) 

    picker.dismiss(animated: true, completion: nil) 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    self.imagePicker.delegate = self 
} 

提前致謝!

回答

1

你是從自身內部調用函數,在這裏:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    print(123) 
    imagePickerController(imagePicker, didFinishPickingMediaWithInfo: [saveFileName : kUTTypeMovie]) 

知道導致無限循環。