2

拡張子で一致するファイルタイプのペアにUTIを追加しようとしています。私はそれを適切にセットアップしたと思います-少なくとも、ファイル拡張子-> UTIマッピングは認識されます(info.plistでインポートされたタイプとして宣言しました)。ただし、テスト ファイルから UTI を取得しようとすると、動的 UTI が返されます。これら 2 つのケースをテストするために使用しているサンプル コードを次に示します。

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」を出力します。私は彼らが同じものを印刷すると思っていたでしょう。file->UTI マッピングを機能させるための追加の手順はありますか、それとも Launch Services が追いつく必要がある場合ですか?

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>
4

1 に答える 1

9

あれから 1 年近くが経ちましたが、今日、この問題に再度対処しなければなりませんでした。既に に準拠してpublic.dataいますが、準拠する型として含める必要があるようです。したがって、配列は次のようになります。public.disk-imagepublic.dataUTTypeConformsTo

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

この変更を行った後、上記のファイル -> UTI と拡張子 -> UTI の比較では、同じ結果が得られます。

于 2011-04-27T20:30:44.537 に答える