2012-04-23 3 views
7

Una delle caratteristiche di BBEdit è il modo in cui tiene traccia dei file indipendentemente da ciò che accade a quei file. L'applicazione su cui sto lavorando deve tenere traccia della posizione di un numero di file di proprietà dell'utente. L'utente può spostare o eliminare questi file e la mia applicazione deve sapere dove sono quei file, anche se la mia applicazione non era in esecuzione al momento in cui è avvenuta la modifica della posizione.Come tenere traccia delle posizioni dei file su Mac OS X?

La mia domanda è quale strategia consigliata per questo problema è o potrebbe essere? Tenere traccia dei file mentre l'applicazione è in esecuzione non è un problema. Voglio il percorso corretto per i file quando la mia applicazione è in esecuzione, non importa cosa sia successo a quei file quando la mia applicazione non era in esecuzione.

La ricerca manuale dei file è l'approccio migliore o c'è un'API che sto trascurando che rende più semplice questo?

risposta

12

A partire da 10,6, è fatto da “Segnalibri” funzionalità di NSURL:

segnalibri sono un nuovo impianto per la generazione di riferimenti persistenti alle risorse identificate da URL. Un segnalibro è un oggetto dati generato dal sistema da un URL di risorsa. I dati dei segnalibri racchiudono un riferimento duraturo e opaco alla risorsa sottostante nonché il valore delle proprietà delle risorse acquisite al momento della creazione del segnalibro. Un segnalibro può essere archiviato in memoria o su disco e successivamente utilizzato per accedere ai valori delle proprietà delle risorse che contiene o risolto per coprire l'URL della risorsa sottostante. Nel caso delle risorse del file system, il segnalibro è in grado di individuare le risorse che sono state spostate o rinominate da quando è stato creato il segnalibro, in modo simile agli alias di Alias ​​Manager. Nota che in questa versione i segnalibri vengono risolti solo per path.

I seguenti nuovi metodi NSURL sono ulteriormente documentati in 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; 

Prima di 10,6, è stato fatto con aliases.

+0

+1 Molto interessante ... –

+1

Questo è il motivo principale per cui in 10.6 Apple ha aggiunto versioni basate su URL di praticamente tutte le API che accettano percorsi come argomenti. Ora sei fortemente incoraggiato a utilizzare gli URL dei file piuttosto che i percorsi. "Fortemente incoraggiato" di Apple in genere significa "il vecchio modo rischia di essere deprecato presto". –

+0

Questo è fantastico. Fortunatamente, la mia applicazione richiede 10.6 o superiore, quindi i segnalibri sembrano essere tutto ciò di cui ho bisogno. Grazie mille @hamstergene. –