我试图通过按钮从图库中获取图像,但出现此错误:
线程1:致命错误:展开包装时意外发现nil可选值。
我看过所有其他的问题与我的相似,但由于某种原因,我无法解决我的问题问题。
class ViewController: UIViewController, VNDocumentCameraViewControllerDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
var textRecognitionRequest = VNRecognizeTextRequest()
var recognizedText = ""
var text2 = "";
@IBOutlet weak var imageTest: UIImageView!
@IBOutlet weak var centreView: CardView!
@IBOutlet weak var centreViewBorder: UIView!
@IBOutlet weak var circleButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
imageTest = UIImageView()
```
```
IBAction func uploadImage(_ sender: UIButton) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
self.present(imagePicker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let image = info[.originalImage] as? UIImage else {
fatalError("Error")
}
imageTest!.image = image
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
第一个问题是您将imageTest变量切换到UIImageView的另一个实例。请记住,在声明IBOutlet并使用!时。您变量的内存指针引用内存中的nil值。您不再需要再次分配它。此外,将来在引用它时,将不再需要将其拆开,因为!在声明中使力量解开是明确的。
override func viewDidLoad() {
super.viewDidLoad()
imageTest = UIImageView() -- ***** Remove this line *****
也需要更改
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let image = info[.originalImage] as? UIImage else {
fatalError("Error")
}
imageTest!.image = image -- ******* REMOVE THE BANG HERE ******
dismiss(animated: true, completion: nil)
}