我正在尝试为扩展匹配的一对文件类型添加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>