首页 > 解决方案 > iOS 共享扩展 - loadItemForTypeIdentifier 调用返回 iOS11 中的文件 url 和 iOS12 中的文件内容

问题描述

我在 iOS 11 和 12 上看到了不同的行为。

在 iOS 11 上 - 我获得了在完成处理程序中共享的文件的文件路径。

在 iOS 12 上 - 我收到 URL 域错误。但是如果我根据类型(例如:UIImage)处理它,那么我会得到文件内容。

这种行为是否只在模拟器或设备上?

我们需要每个 iOS 版本来处理这个吗?

标签: iosobjective-cshareshare-extension

解决方案


是的,您还将在设备上同时获得这两个东西(文件路径或数据)。您无需在 iOS 版本上添加任何检查。

请流动我的代码。它很快,但你可以理解它。

func share() {
let inputItem = extensionContext!.inputItems.first! as! NSExtensionItem
let attachment = inputItem.attachments!.first as! NSItemProvider
if attachment.hasItemConformingToTypeIdentifier( kUTTypeImage as String) {
    attachment.loadItem(forTypeIdentifier: kUTTypeImage as String, options: [:]) { (data, error) in
        var image: UIImage?
        if let someURl = data as? URL {
            image = UIImage(contentsOfFile: someURl.path)
        }else if let someImage = data as? UIImage {
            image = someImage
        }
        
        if let someImage = image {
            guard let compressedImagePath = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent("shareImage.jpg", isDirectory: false) else {
                return
            }
            
            let compressedImageData = UIImageJPEGRepresentation(someImage, 1)
            guard (try? compressedImageData?.write(to: compressedImagePath)) != nil else {
                return
            }
            
        }else{
            print("bad share data")
        }
    }
    
}

}


推荐阅读