【问题标题】:Why does my app crashes when I tap "Save Image" option on UIActivityViewController?当我点击 UIActivityViewController 上的“保存图像”选项时,为什么我的应用程序会崩溃?
【发布时间】:2019-03-30 01:50:44
【问题描述】:

所以,在 3D Touch peek 控制器中,我在设置 UIPreviewAction 的地方有这个计算变量:

override lazy var previewActionItems: [UIPreviewActionItem] = {

    let save = UIPreviewAction.init(title: "Share Image", style: UIPreviewAction.Style.default, handler: { (action, controller) in
        let renderer = UIGraphicsImageRenderer(size: self.view.bounds.size)
        let imageAux = renderer.image { ctx in
            self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true)
        }
        self.delegate!.shareImage(image: imageAux, url: self.data.url)
    })

    return [save]
}()

在委托控制器中,我有这个方法来呈现 UIActivityViewController:

func shareImage(image: UIImage, url: String) {

    if let data = image.pngData() {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let filename = paths[0].appendingPathComponent(url)
        try? data.write(to: filename)
    }

    let activityViewController = UIActivityViewController(activityItems: [image] , applicationActivities: nil)
    activityViewController.popoverPresentationController?.sourceView = self.view
    self.present(activityViewController, animated: true, completion: nil)
}

一切正常,我可以与任何应用程序共享,并且可以使用文件浏览器进行存储,但如果我按“保存图像”,应用程序就会崩溃。看起来我需要画廊权限,但我不知道如何在 UIPreviewAction 中实现它以检查我是否有权限,以便如果我这样做它会保存,如果我没有它会请求许可。

【问题讨论】:

    标签: swift uikit uiactivityviewcontroller uipreviewaction


    【解决方案1】:

    在新的 InfoPlist.strings 文件中添加新记录。

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>$(PRODUCT_NAME)</string>
    
    <key>NSPhotoLibraryUsageDescription</key>
    <string>$(PRODUCT_NAME)</string>
    

    从模拟器中删除您的应用并再次运行。

    【讨论】:

    • 有效!谢谢。你能给我链接任何相关的文档或指南吗?
    • 欢迎,我附上链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多