0

我正在将 UIImagePickerController 替换为 iOS 14 的 PHPickerViewController,但我在使用 PHPickerViewController 在 UI 中显示所选照片时遇到问题。当我从照片库中选择一张照片时,PHPickerViewController 会自行关闭而不更新 UI 中的照片。我一直在尝试各种教程中的不同解决方案,但每次都得到相同的结果。

以下是我目前拥有的代码。DispatchQueue.main.async 括号内的代码是我一直用于 UIImagePickerController 在 UI 中显示照片的代码。

extension EditProfileController: PHPickerViewControllerDelegate {
    @available(iOS 14, *)

    func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        picker.dismiss(animated: true, completion: nil)

        for result in results {
            result.itemProvider.loadObject(ofClass: UIImage.self) { object, error in
                if let image = object as? UIImage {
                    DispatchQueue.main.async {
                        self.profileImageView.image = image
                        self.imageChanged = true
                    }
                }
            }
        }
    }
}
4

1 回答 1

0

您的代码没有什么大问题。我会这样写,但它几乎是一样的:

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    picker.dismiss(animated: true) {
        guard let result = results.first else { 
            print("no results")
            return 
        }
        let prov = result.itemProvider
        guard prov.canLoadObject(ofClass: UIImage.self) else { 
            print("no image")
            return
        }
        prov.loadObject(ofClass: UIImage.self) { object, error in
            if let image = object as? UIImage {
                DispatchQueue.main.async {
                    self.profileImageView.image = image
                    self.imageChanged = true
                }
            } else {
                print(error as Any)
            }
        }
    }
}

像这样尝试,只是作为一个实验,因为我们知道它通常可以工作。使用断点和控制台消息来确保执行路径按照您的预期进行。如果是这样,但图像的显示仍然不起作用,我不得不建议问题出在其他地方,在你没有向我们展示的代码中。

于 2021-09-07T03:05:45.640 回答