我正在嘗試爲擴展匹配的一對文件類型添加UTI。我認爲我已經正確設置了 - 至少,文件擴展名 - > UTI映射是可識別的(我將它聲明爲info.plist中的導入類型)。但是,當我嘗試從我的測試文件中獲取UTI時,我會返回一個動態UTI。下面是我使用來測試這兩種情況的示例代碼:將UTI分配給文件類型
NSString *previewTypeUTI = nil;
NSURL *previewFileURL = [NSURL fileURLWithPath:@"/Users/eblair/Desktop/EWF/thetestfile.myext1"];
[previewFileURL getResourceValue:&previewTypeUTI forKey:NSURLTypeIdentifierKey error:nil];
NSLog(@"%@", previewTypeUTI); // #1
NSString *testUTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[previewFileURL pathExtension], NULL);
NSLog(@"%@", testUTI); // #2
[testUTI release];
的NSLog#1打印出「DYN ########」和NSLog的#2打印出「com.mycompany.filetype1 」。我會希望他們打印同樣的東西。是否有一些額外的步驟來使文件 - > UTI映射工作,或者是啓動服務需要趕上的情況?
只使用擴展 - > UTI映射不是一種選擇,因爲我想使用一些利用UTI的API,並且這些API似乎正在使用文件 - > UTI映射。
爲了完整起見,這裏是爲進口類型的plist條目:
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.disk-image</string>
</array>
<key>UTTypeDescription</key>
<string>File Type 1</string>
<key>UTTypeIdentifier</key>
<string>com.mycompany.filetype1</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>myext1</string>
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.disk-image</string>
</array>
<key>UTTypeDescription</key>
<string>File Type 2</string>
<key>UTTypeIdentifier</key>
<string>com.mycompany.filetype2</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>myext2</string>
</array>
</dict>
</dict>
</array>