创建具有未知类型的图像格式是错误UIImagePickerController(),意外地发现nil

时间:2018-05-05 13:00:50

标签: swift3 uiimagepickercontroller

Swift版本3
Xcode版本8.3.3(8E3004b)

之前已经提出并回答了这个问题。然而,我无法找到解决此错误的方法。 "Creating an image format with an unknown type is an error" with UIImagePickerController

从照片库中选择新照片时,我收到此错误

  

Generic创建具有未知类型的图像格式是错误。

我选择了照片,当我点按选择时,我在func takePhoto我收到错误self?.imgView.image = newImage

  

致命错误:在展开Optional值时意外发现nil   打印newImage的描述:表达式产生的错误:错误:   /var/folders/s0/xq_zc7l56m1__n1qjk29p6tw0000gn/T/./lldb/2631/expr1.swift:1:80:   错误:使用未申报的类型' UIKit'   Swift._DebuggerSupport.stringForPrintObject(Swift.UnsafePointer>(位模式:   0x118055200)!指针对象)                                                                                  ^ ~~~~

typealias imagePickerHelperCompletion = ((UIImage?) -> Void)!

class ImagePickerHelper: NSObject {

 weak var viewController: UIViewController!
 var cameraFlashMode: UIImagePickerControllerCameraFlashMode   //flash, no flash
 var photoLibraryIsVisible: Bool
 var cameraDevice: UIImagePickerControllerCameraDevice //front, back camera
 var completion: imagePickerHelperCompletion


   init(viewController: UIViewController, cameraFlashMode:UIImagePickerControllerCameraFlashMode, photoLibraryIsVisible: Bool,cameraDevice: UIImagePickerControllerCameraDevice, completion: imagePickerHelperCompletion) {

    self.viewController = viewController
    self.completion = completion
    self.cameraFlashMode = cameraFlashMode
    self.photoLibraryIsVisible = photoLibraryIsVisible
    self.cameraDevice = cameraDevice

    //super.init() implemented by subclasses to initializer a new object (the receiver) immediately after memory has been allocated
    super.init()

    self.showPhotoSourceSelection()
}


//show camera or photo library
func showPhotoSourceSelection() {

    let actionSheet = UIAlertController(title: "Take new photo", message: "Would you like to open \n Camera or Photo Library?", preferredStyle: .actionSheet)

    let cameraAction = UIAlertAction(title: "Camera", style: .default) { (action) in
        self.showImagePicker(sourceType: .camera)
    }

    let photoLibraryAction = UIAlertAction(title: "Photo Library", style: .default) { (action) in
        self.showImagePicker(sourceType: .photoLibrary)
    }

    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (action) in  }

        actionSheet.addAction(cameraAction)
    if photoLibraryIsVisible == true { actionSheet.addAction(photoLibraryAction) }
        actionSheet.addAction(cancelAction)
      viewController.present(actionSheet, animated: true, completion: nil)
}



func showImagePicker(sourceType: UIImagePickerControllerSourceType) {

    let imagePicker = UIImagePickerController()
    imagePicker.allowsEditing = true //user can crop the image, or do some editing
    imagePicker.sourceType = sourceType
    imagePicker.mediaTypes = [kUTTypeImage as String]
    imagePicker.delegate = self

      if imagePicker.sourceType == .camera {
         imagePicker.cameraFlashMode = cameraFlashMode
         imagePicker.cameraDevice = self.cameraDevice
    }
    viewController.present(imagePicker, animated: true, completion: nil)
 }
}//end of class



 extension ImagePickerHelper: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    viewController.dismiss(animated: true, completion: nil)
}



//if user did take a photo
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    print(info)
  //prints out ["UIImagePickerControllerEditedImage": <UIImage: 0x610000294320> size {746, 498} orientation 0 scale 1.000000, "UIImagePickerControllerMediaType": public.image, "UIImagePickerControllerCropRect": NSRect: {{0, 0}, {2661, 1779}}, "UIImagePickerControllerReferenceURL": assets-library://asset/asset.JPG?id=ED7AC36B-A150-4C38-BB8C-B6D696F4F2ED&ext=JPG, "UIImagePickerControllerOriginalImage": <UIImage: 0x610000299320> size {2668, 1780} orientation 0 scale 1.000000]



    if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
        completion(image)
        viewController.dismiss(animated: true, completion: nil)

    } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
          viewController.dismiss(animated: true, completion: nil)
          completion(image)

        } else {
        print("something is wrong line \(#line)")
       }
    }


}//end of extension






class ProfileViewController: UITableViewController {

  var imagePickerHelper: ImagePickerHelper!
  override func viewDidLoad() {
     super.viewDidLoad()
 }

  @IBAction func takePhoto(_ sender: Any) {

     //create instance of ImagePickerHelper and take photo, or get it from photoLibrary
      imagePickerHelper = ImagePickerHelper(  viewController: self, cameraFlashMode: .auto,photoLibraryIsVisible: true, cameraDevice: .front,
        completion: { [weak self] (newImage) in
     })
   }
}//end of class

0 个答案:

没有答案