2017-04-20 109 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」。