ios - iOS 共享扩展 - loadItemForTypeIdentifier 调用返回 iOS11 中的文件 url 和 iOS12 中的文件内容
问题描述
我在 iOS 11 和 12 上看到了不同的行为。
在 iOS 11 上 - 我获得了在完成处理程序中共享的文件的文件路径。
在 iOS 12 上 - 我收到 URL 域错误。但是如果我根据类型(例如:UIImage)处理它,那么我会得到文件内容。
这种行为是否只在模拟器或设备上?
我们需要每个 iOS 版本来处理这个吗?
解决方案
是的,您还将在设备上同时获得这两个东西(文件路径或数据)。您无需在 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")
}
}
}
}