Как я могу исправить нулевую ошибку при попытке сохранить изображение в библиотеке? - PullRequest
0 голосов
/ 09 октября 2019

Я создаю приложение, которое делает снимок, и тогда у вас будет возможность сохранить его. Однако, прежде чем сделать снимок, UIImageView пуст (ноль), и когда вы нажимаете кнопку сохранения, он вылетает, потому что вы не можете сохранить фотографии с нулевым. Как я могу сделать обработку ошибок, чтобы она не вылетала, когда UIImageView равен nil.

Я пробовал бросать и ловить, но не могу заставить его работать.

func tryDataConversion() throws -> Data {
        let imageData = myImage.image!.jpegData(compressionQuality: 1.0)
        return imageData!
    }

Полный код для функции действия, с которой я хочу работать:

@IBAction func saveImageButton(_ sender: Any) {
            let imageData = myImage.image!.jpegData(compressionQuality: 1.0)
            let compressedImage = UIImage(data: imageData!)
            UIImageWriteToSavedPhotosAlbum(compressedImage!, nil, nil, nil)

            alert(title: "Recent Photo Saved", msg: "Your most recent photo has been saved to your photo library")
    }

, как только в следующей строке происходит сбой, потому что при развертывании он находит ноль и может развернуть ноль.

let imageData = myImage.image!.jpegData(compressionQuality: 1.0)

ивыдает следующую ошибку.

Fatal error: Unexpectedly found nil while unwrapping an Optional value:

Ответы [ 2 ]

1 голос
/ 09 октября 2019

вместо

let imageData = myImage.image!.jpegData(compressionQuality: 1.0)
let compressedImage = UIImage(data: imageData!)
UIImageWriteToSavedPhotosAlbum(compressedImage!, nil, nil, nil)

попробуйте это:

if let imageData = myImage.image?.jpegData(compressionQuality: 1.0), 
let compressedImage = UIImage(data: imageData) {
    UIImageWriteToSavedPhotosAlbum(compressedImage!, nil, nil, nil)
} 
0 голосов
/ 09 октября 2019

Если вы хотите выдать ошибку для обработки, вам нужно создать ошибку:

enum DataConversionError: Error {
  case emptyImage
}

func tryDataConversion() throws -> Data {
  guard let imageData = someData else {
      throw DataConversionError.emptyImage
  }

  return imageData
}

func handleSaveButtonTap() {
  do {
      let imageData = try tryDataConversion()
      // Do something with your imageData
      print(imageData)
  }
  catch {
      // Handle your error here
      print("UIImageView is empty")
      print("Error: \(error)")
      return
  }
}
...