1

TextEdit でテキスト ドキュメントを開いて終了し、ファイルの名前を変更して TextEdit を再起動すると、名前が変更されたファイルが自動的に開かれます。ファイルを別のフォルダに移動した場合も同様です。

この実験から、Mac OS X で自動的に再度開かれるドキュメントを処理するものは、ファイル パスを使用しないか、少なくともファイル パスのみを使用するわけではないという結論に達しました。

では、ファイル パスは別として、アプリが実行されていないときにターゲット ファイルの名前が変更されたり移動されたりしても有効なドキュメントに書き込むことができるファイル参照はどのようなものでしょうか?

独自のドキュメント内の他のファイルへの参照を保存する必要がある可能性のあるアプリに取り組んでいるため、これに興味があります。

4

1 に答える 1

3

NSURLベースのソリューションを探しています。ファイルを移動/名前変更した後でもファイルを参照するブックマークを作成できます。

Peter Sugihara による GitHub の FileWatcherからの借用:

- (NSData *)bookmarkFromURL:(NSURL *)url {
    NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationPreferFileIDResolution
                     includingResourceValuesForKeys:NULL
                                      relativeToURL:NULL
                                              error:NULL];
    return bookmark;
}

- (NSURL *)urlFromBookmark:(NSData *)bookmark {
    NSError *error = noErr;
    NSURL *url = [NSURL URLByResolvingBookmarkData:bookmark
                                           options:NSURLBookmarkResolutionWithoutUI
                                     relativeToURL:NULL
                               bookmarkDataIsStale:NULL
                                             error:&error];
    if (error != noErr)
        NSLog(@"%@", [error description]);
    return url;
}

返されたブックマーク データは安全に保持でき、アプリが再起動された後も同じファイルを指します。

公式ドキュメントの追加情報:ブックマークを使用したファイルの検索

編集:上記のコードのエラー処理に関連する Peter Hosey による非常に有効な提案に従って、注: FileWatcher の上記のコードは標準に従ってエラーを処理せず、ガイドラインとして役立つように添付されています。

詳細については、公式ドキュメントを参照してください。

于 2013-02-16T16:56:03.103 に答える