使用“复制到应用程序”导入文件时,缩略图元数据消失

时间:2018-01-12 06:46:36

标签: ios url metadata thumbnails uidocument

我一直在使用URL资源将缩略图元数据嵌入到基于自定义文档的文件中。当我导出自定义文档文件时,在iOS文件应用程序中查看时,缩略图会很好地显示。

override func fileAttributesToWrite(to url: URL, for saveOperation: UIDocumentSaveOperation) throws -> [AnyHashable : Any] {
    var attr: [AnyHashable : Any] = [URLResourceKey.hasHiddenExtensionKey: true]

    // Ignore the proper resizing for now.
    ...

    attr[URLResourceKey.thumbnailDictionaryKey] = [
        URLThumbnailDictionaryItem.NSThumbnail1024x1024SizeKey: #imageLiteral(resourceName: "Star")
    ]

    return attr
}

enter image description here (图标来源:Use Your Loaf

但是,当我使用共享操作Copy to <MyApp>将文件导回到我的应用中时,所有元数据似乎都存在,但缩略图除外。

enter image description here

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

    // Other non-image metadata survives, like creationDate.
    if let creationDateOpt = try? url.resourceValues(forKeys: [.creationDateKey]).creationDate,
        let creationDate = creationDateOpt {
        print("creationDate: \(creationDate)")
    }


    if let thumbnailDictOpt = try? url.resourceValues(forKeys: [.thumbnailDictionaryKey]).thumbnailDictionary,
        let thumbnailDict = thumbnailDictOpt,
        let thumbnail = thumbnailDict[URLThumbnailDictionaryItem.NSThumbnail1024x1024SizeKey] {
        print ("Thumbnail survived. Size: \(thumbnail.size)")
        return true
    }
    print ("Thumbnail disappeard!")
    return false
}

考虑到当我在“文件”应用程序中手动复制文件时缩略图仍然存在,丢失必须在系统将文件从“文件”复制到应用程序的容器期间发生。为什么会这样?我也可以手动将缩略图作为文件数据的一部分嵌入,但我觉得应该有办法解决这个问题,因为其他基于文本的元数据仍然存在。

我尝试使用promisedResourceValue方法,怀疑文件在打开时可能没有完全复制,但结果是一样的。

enter image description here

我的完整项目可用here on GitHub

0 个答案:

没有答案