0

あるファイル形式から別のファイル形式に簡単に変換できるアプリケーションを構築しようとしています。ソース ファイルをドック タイルにドラッグすると、出力ファイルがソース ファイルと一緒に (同じディレクトリに) 作成されます。

ドキュメントを読んだ後、すべてが正しくセットアップされました。

私の Info.plist には次のものが含まれています。

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            my_src_type
        </array>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        [...]
    </dict>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            my_dest_type
        </array>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>NSIsRelatedItemType</key>
        <true/>
        [...]
    </dict>
</array>

ドキュメントを正しく読んでいる場合、これにより、アプリはmy_src_typeドラッグアンドドロップを介してファイルを受け入れmy_dest_type、入力ファイルと同じディレクトリにファイルを出力できるようになります。もちろん、サンドボックスにそれを知らせた場合に限ります。

そのために、SimpleFilePresenter次のような があります。

 @interface SimpleFilePresenter : NSObject<NSFilePresenter>
 @property (atomic, strong) NSURL *presentedItemURL;
 @property (atomic, strong) NSURL *primaryPresentedItemURL;
 @end

 @implementation SimpleFilePresenter
 - (NSOperationQueue *)presentedItemOperationQueue {
         return [NSOperationQueue mainQueue];
 }
 @end

出力ファイルを作成する許可を要求するとすぐaddFilePresenter:に、コンソールに次のエラーが表示されます。

2013-04-26 6:33:52.741 PM my_app[27639]: NSFileSandboxingRequestRelatedItemExtension: an error was received from pboxd instead of a token. Domain: NSPOSIXErrorDomain, code: 1
2013-04-26 6:33:52.741 PM my_app[27639]: +[NSFileCoordinator addFilePresenter:] could not get a sandbox extension. primaryPresentedItemURL: file://[...]/file.my_src_type, presentedItemURL: file://[...]/file.my_dest_type
4

2 に答える 2

1

同期的または瞬間的addFilePresenter:ではないことが判明しました。私がしなければならなかったのは、すべてのファイルプレゼンターが準備が整うまでブロックする効果があるように見える[NSFileCoordinator filePresenters]呼び出しだけでした。addFilePresenter:

また、私は Qt を使用しているのでNSURL、より恐ろしく見えるNSFileCoordinatorメソッドから特別に作成されたオブジェクトを取得する必要なく、これがすべて機能することに驚きました。

于 2013-04-27T03:43:29.940 に答える