iOS - Swift 3 分享扩展预览图片

iOS - Swift 3 Share Extension Preview Image

我目前正在构建一个接受 URL 的共享扩展程序。作为其中的一部分,我按照上一个问题中的概述自定义了我的共享屏幕,以创建一个全屏视图控制器。这一切都很好。但是在默认的共享作曲家视图中,我注意到有一个网页的预览图像。我试图在我的扩展程序中访问它,但我似乎无法掌握它。

具体来说,我一直在尝试使用

方法

loadPreviewImage

https://developer.apple.com/reference/foundation/nsitemprovider/1403925-loadpreviewimage

您会在文档中注意到,这为完成处理程序说明了以下内容

completion​Handler A completion handler block to execute with the results. The first parameter of this block must be a parameter of type NSData, NSURL, UIImage (in iOS), or NSImage (in macOS) for receiving the image data. For more information about implementing the block, see Completion​Handler.

但是,如果我尝试在我的完成块中将其设置为 UIImage,我会收到

错误

Cannot convert value of type '(UIImage, _) -> ()' to expected argument type 'NSItemProvider.CompletionHandler!'

通过 guard 语句确认 itemProvider 是 NSItemProvider 实例的示例代码

itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in    
        }

完成处理程序的文档说将其设置为您想要的类型,它会尝试将数据强制转换为您指定的类型。谁看过这个吗?我不确定在这里做什么,因为我看不到我做错了什么。

https://developer.apple.com/reference/foundation/nsitemprovider/completionhandler

如果一切都失败了,我会考虑使用一些 Javascript 从 dom 获取图像,但我更喜欢 Apple 似乎提供的预览图像

我不知道为什么

中的代码
itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in    
        }

点击 Post 按钮时不调用。

我的方法是在方法

中保存预览图像
override func configurationItems() -> [Any]! {
}

作为

let inputItem: NSExtensionItem = self.extensionContext?.inputItems[0] as! NSExtensionItem
        let itemProvider = inputItem.attachments![0] as! NSItemProvider
if (itemProvider.hasItemConformingToTypeIdentifier("public.url")) {
            itemProvider.loadPreviewImage(options: nil, completionHandler: { (item, error) in // 画像を取得する
                if let image = item as? UIImage {
                    if let data = UIImagePNGRepresentation(image) {
                        self.photoNSURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("preview.png") as NSURL!

                        do {
                            try data.write(to: self.photoNSURL as URL, options: .atomic)
                        } catch {
                            print("\(#file)#\(#function)(\(#line)): error: \(error.localizedDescription)")
                        }
                    }
                }
            })
        }