iOS共享扩展名-loadItemForTypeIdentifier调用返回iOS11中的文件url和iOS12中的文件内容

时间:2019-03-11 08:45:08

标签: ios objective-c share share-extension

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

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

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

此行为是否仅在模拟器或设备上?

我们需要针对每个iOS版本处理此问题吗?

1 个答案:

答案 0 :(得分:0)

是的,您还将在设备上同时获得两种内容(文件路径或数据)。您无需在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")
        }
    }

}

}