【问题标题】:Why is UTTypeCreatePreferredIdentifierForTag returning strange UTI?为什么 UTTypeCreatePreferredIdentifierForTag 返回奇怪的 UTI?
【发布时间】:2017-04-20 11:39:33
【问题描述】:

如果我这样称呼

import UIKit
import MobileCoreServices
import Foundation

var fileExtension:CFString = "7z" as CFString
var unmanagedFileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, nil)?.takeRetainedValue();
print(unmanagedFileUTI)

我明白了

dyn.age8xs8u

结果。我没有找到关于age8xs8u 的任何信息。这是 7z 的正确 UTI 吗?

【问题讨论】:

  • 来自developer.apple.com/reference/coreservices/… 的文档:“如果没有找到结果,此函数会创建一个以 dyn 前缀开头的动态类型。”
  • 下面这句话是什么意思? “这允许你传递 UTI 并将其转换回原始标签” 我应该依赖UTTypeCreatePreferredIdentifierForTag 吗? UTI 是否与已安装的应用相关?
  • 这意味着 MobileCoreServices 框架不知道“7z”文件扩展名并且没有应用程序注册它,所以是的,它可以依赖于已安装的应用程序。
  • 也许你用这些信息写了一个答案。

标签: ios swift uti


【解决方案1】:

这意味着“7z”文件扩展名对于 MobileCoreServices 框架是未知的,并且没有被任何已安装的应用程序注册。在这种情况下 UTTypeCreatePreferredIdentifierForTag() 创建并返回一个临时 UTI:

如果没有找到结果,这个函数会创建一个以 dyn 前缀开头的动态类型。这允许您传递 UTI 并将其转换回原始标签。

仅当inTagClass 参数无效时,该函数才返回nil。 使用有效的标记类参数,您将始终获得 UTI,用于任意文件标识符。

您可以检查返回值是否具有前缀“dyn”。为了检查 如果返回的 UTI 是动态创建的或注册的 UTI。

根据https://en.wikipedia.org/wiki/7z,7z 文件的 UTI 格式为“org.7-zip.7-zip-archive”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多