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

问题描述 投票:0回答:1

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

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

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

这种行为是仅在模拟器上还是在设备上?

我们是否需要根据iOS版本处理此问题?

ios objective-c share share-extension
1个回答
0
投票

Yes you will get both thing (file path or data) on device also. You did not need to add any check on iOS version.

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

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

}

}

© www.soinside.com 2019 - 2024. All rights reserved.