Se si utilizza NSDocument
è possibile ottenere il percorso di file wrapper di file regolari con un piccolo trucco.
Prima creare una sottoclasse NSFileWrapper
e sovraccaricare i metodi di file regolari che ricevono un URL per memorizzarne una copia.
@implementation RMFileWrapper
- (id) initWithURL:(NSURL *)url options:(NSFileWrapperReadingOptions)options error:(NSError *__autoreleasing *)outError {
if (self = [super initWithURL:url options:options error:outError]) {
self.originalURL = url;
}
return self;
}
- (BOOL) readFromURL:(NSURL *)url options:(NSFileWrapperReadingOptions)options error:(NSError *__autoreleasing *)outError {
BOOL successful = [super readFromURL:url options:options error:outError];
if (successful) {
self.originalURL = url;
}
return successful;
}
@end
Quindi aggiungere questo NSFileWrapper
categoria:
@implementation NSFileWrapper(bestURLWithDocument)
- (NSURL*) bestURLInDocument:(SBDocument*)document {
if (document.fileURL && self.filename) {
NSString* path = [document.fileURL.path stringByAppendingPathComponent:self.filename];
return [NSURL fileURLWithPath:path];
} else if ([self isKindOfClass:[RMFileWrapper class]]) {
RMFileWrapper *fileWrapper = (RMFileWrapper*) self;
return fileWrapper.originalURL;
}
return nil;
}
@end
bestURLInDocument:
restituirà l'url del nodo del file system, se disponibile, o l'URL del file originale, se non.
Il codice precedente presuppone che non si annidino i wrapper di file di directory.
Nel caso in cui si utilizzi 'NSDocument' .... http://www.zedkep.com/blog/index.php?/archives/197-Determining-a-full-file-path-from-an -NSFileWrapper.html –
Sto usando 'NSDocument', e ho visto quel post. La mia unica preoccupazione è che il documento possa essere spostato in una nuova posizione mentre è aperto, e questo viene gestito in modo trasparente. Ma se provo ad accedere a un file dal vecchio percorso, si bloccherà. – Greg
C'è una funzione di callback in 'NSDocument' per dirmi quando il file si muove fisicamente o viene rinominato? – Greg