2010-07-28 3 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를 활용하는 일부 API를 사용하고 해당 API가 파일 -> UTI 매핑을 사용하는 것처럼 보이기 때문에 확장 -> 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.disk-image이 이미 public.data에 부합하더라도 public.data을 준수하는 유형으로 포함해야합니다. 그래서, UTTypeConformsTo 배열은 다음과 같이한다 :

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

을이 변경을 한 후, 내 위의 비교 파일 -> UTI 및 extension-> UTI 지금 같은 결과를 얻을 수 있습니다.