iOS – Swift 3 Share Extension预览图

我目前正在构建一个接受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!’

示例代码,其中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    
        }

点按“发布”按钮时未调用.

我的方法是在方法中保存预览图像

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)")
                        }
                    }
                }
            })
        }
点赞