2017-04-20 121 views
1

如果我把这个为什么UTTypeCreatePreferredIdentifierForTag返回奇怪的UTI?

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吗?

+1

从https://developer.apple.com/reference/coreservices/1448939-uttypecreatepreferredidentifierf处的文档:*“如果未找到任何结果,则此函数将创建一个以dyn前缀开头的动态类型。”* –

+0

下列句子是什么意思? “*这允许你传递UTI并将其转换回原始标签*”​​我应该依赖于UTTypeCreatePreferredIdentifierForTag吗? UTI是否与已安装的应用程序相关? – testing

+1

这意味着MobileCoreServices框架不知道“7z”文件扩展名,也没有应用程序注册它,所以是的,它可以依赖于已安装的应用程序。 –

回答

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”。