2010-07-28 144 views
2

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

回答

7

那么,它已经接近一年了,但我今天这个不得不重新地址,我想我偶然发现我做错了什么。看起来您需要包含public.data作为您符合的类型,即使public.disk-image已符合public.data。因此,UTTypeConformsTo阵列应该是这样的:

<key>UTTypeConformsTo</key> 
    <array> 
     <string>public.data</string> 
     <string>public.disk-image</string> 
    </array> 

进行此更改后,我对上面的对比文件 - > UTI和扩展 - > UTI现在产生相同的结果。

相关问题