首页 > 解决方案 > 如何将图像从 imageView 保存到照片库?

问题描述

当我单击导航栏上的“添加”按钮时,我需要将 imageView 的照片保存到图库中。我正在尝试保存它,但出现“线程 1:信号 SIGABRT”错误。也许有人知道,问题出在哪里?

class ViewControllerFilters2: UIViewController, UINavigationControllerDelegate {

@IBOutlet weak var imageView: UIImageView!
var filteredImage: UIImage?
var imagePicker: UIImagePickerController!

override func viewDidLoad() {
    super.viewDidLoad()

    if imageView.image == nil {
        imageView.image = filteredImage!
    }

     navigationItem.rightBarButtonItem = UIBarButtonItem(title: "✔", style: .plain, target: self, action: #selector(imagePickerController(_:didFinishPickingMediaWithInfo:)))

}

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let pickedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage{
        UIImageWriteToSavedPhotosAlbum(pickedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)

        dismiss(animated: true, completion: nil)
    }
}

@objc func image (_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
    if let error = error {
        // we got back an error!
        let ac = UIAlertController(title: "Save error", message: error.localizedDescription, preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "OK", style: .default))
        present(ac, animated: true)
    } else {
        let ac = UIAlertController(title: "Saved!", message: "Your altered image has been saved to your photos.", preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "OK", style: .default))
        present(ac, animated: true)
    }
}

}

标签: iosswiftxcodeuiimageviewphoto-gallery

解决方案


在刻度/添加按钮上调用的方法似乎错误,目标应该是调用方法的 uibarbutton 项:

     navigationItem.rightBarButtonItem = UIBarButtonItem(title: "✔", style: .plain, target: self, action: #selector(imagePickerController(_:didFinishPickingMediaWithInfo:)))

更改用于保存图像的选择器,该选择器将具有用于将图像保存到相册的代码,例如:

        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "✔", style: .plain, target: self, action: #selector(saveImage))

和保存图像的方法可能是这样的:

    @objc func saveImage() {
    if let pickedImage = imageView.image {
        UIImageWriteToSavedPhotosAlbum(pickedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
    }
   }

此外,在 imagePickerController didFinish 方法中,将图像分配给图像视图,以便在单击添加时保存新图像。

编辑

根据崩溃日志,在您的 plist 中为 NSPhotoLibraryAddUsageDescription 添加用法信息:

在此处输入图像描述

希望能帮助到你.. :)


推荐阅读