2012-04-23 20 views
7

BBEditの優れた機能の1つは、それらのファイルに何が起こっても、ファイルの追跡方法です。私が取り組んでいるアプリケーションは、ユーザーが所有するいくつかのファイルの場所を追跡する必要があります。ユーザーはこれらのファイルを移動または削除することができます。アプリケーションは、場所の変更が発生した時点でアプリケーションが実行されていない場合でも、それらのファイルがどこにあるかを知る必要があります。Mac OS Xでファイルの場所を追跡する方法は?

私の質問は、この問題の推奨戦略は何ですか?アプリケーションの実行中にファイルを追跡することは問題ではありません。私のアプリケーションが実行されていないときにそれらのファイルに何が起こっても、アプリケーションが実行されているときにファイルへの正しいパスが必要です。

ファイルを手動で検索するのが最善のアプローチですか、それとも私が見落としやすいAPIがありますか?

答えて

12

10.6から始まって、それはNSURLの「ブックマーク」機能によって行われます。

ブックマークは、URLで識別されるリソースへの永続的な参照を生成するための新しい施設です。ブックマークは、リソースURLからシステムによって生成されたデータオブジェクトです。ブックマークデータは、基本リソースへの耐久性のある不透明な参照と、ブックマークの作成時に取得されたリソースプロパティの値をカプセル化します。ブックマークは、メモリまたはディスクに格納し、後でその中に含まれるリソースプロパティ値にアクセスするために使用することも、基になるリソースのURLをカバーするように解決することもできます。ファイルシステムリソースの場合、ブックマークはエイリアスマネージャエイリアスと同様に、ブックマークが作成されてから移動または名前変更されたリソースを見つけることができます。このリリースでは、ブックマークはパスのみで解決されることに注意してください。

次の新しいNSURLの方法は、さらにNSURL.hに記載されています:

- (NSData *)bookmarkDataWithOptions:(NSURLBookmarkCreationOptions)options includingResourceValuesForKeys:(NSArray *)keys relativeToURL:(NSURL*)relativeURL error:(NSURL **)error; 
- (NSURL*)initByResolvingBookmarkData:(NSData*)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error; 
+ (NSURL *)URLByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error; 
+ (NSDictionary *)resourceValuesForKeys:(NSArray *)keys fromBookmarkData:(NSData *)bookmarkData; 

10.6前に、aliasesで行われました。

+0

+1非常に興味深い... –

+1

これが10.6 AppleがURLベースのバージョンのほとんどすべてのAPIを引数として追加した主な理由です。パスではなくファイルURLを使用することを強く推奨します。 Appleの「強く推奨される」とは、一般的に「古い方法は早急に廃止される可能性が高い」ことを意味します。 –

+0

これは素晴らしいことです。幸いにも、私のアプリケーションには10.6以上が必要なので、ブックマークは必要なものすべてであるようです。ありがとう@ハムステルゲン。 –

関連する問題