为什么不UIImagePickerController委托给我的对象类?

class CameraPicker: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { weak var viewController:MyProfileVC! func launchCamera() { if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { let imagePicker:UIImagePickerController = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.camera imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.front imagePicker.cameraCaptureMode = .photo imagePicker.allowsEditing = false self.viewController.present(imagePicker, animated: true, completion: nil) } } } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { print("didFinishPickingMedia") } 

这是我的对象类函数,但didFinishPickingMediaWithInfo函数拍摄后不会被调用。 另外,呈现imagepicker的viewcontroller是一个不同的Swift文件

我有同样的问题,我find了一个解决scheme,所以我发布我的版本(我正在从照片库拍照,但它是一样的:))。

我有一个内存pipe理问题。 我已经创build了一个IBAction函数,我实例化了我的相机处理程序类(委托内…)。 在函数结束时,variables超出范围,并被释放。 为了解决这个问题,我把它作为实例variables。

这是我与我的UiButton的VC代码:

 class STECreateUserVC: UIViewController { @IBOutlet weak var imgAvatar: UIImageView! let cameraHandler = STECameraHandler() @IBAction func buttonPressed(_ sender: UIButton) { cameraHandler.importPictureIn(self) { [weak self] (image) in self?.imgAvatar.image = image } } } 

…这是我的处理程序:

 class STECameraHandler: NSObject { let imagePickerController = UIImagePickerController() var completitionClosure: ((UIImage) -> Void)? func importPictureIn(_ viewController: UIViewController, completitionHandler:((UIImage) -> Void)?) { completitionClosure = completitionHandler imagePickerController.delegate = self imagePickerController.allowsEditing = true imagePickerController.sourceType = .photoLibrary imagePickerController.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! viewController.present(imagePickerController, animated: true, completion: nil) } } extension STECameraHandler: UIImagePickerControllerDelegate, UINavigationControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let completitionClosure = completitionClosure, let image = info[UIImagePickerControllerEditedImage] as? UIImage { completitionClosure(image) } imagePickerController.dismiss(animated: true) } } 

我已经使用了一个闭包为了有一个更干净的代码。

这个:

 self.viewController.present(imagePicker, animated: true, completion: nil) 

应该:

 self.present(imagePicker, animated: true, completion: nil)