2012-07-18 12 views
11

Se prelevo directory Application Support di mia sandbox utilizzando NSFileManager:URLForDirectory poi torno il seguente URL:NSFileManager: enumeratorAtURL: restituisce una diversa forma di URL per NSFileManager: URLForDirectory

file://localhost/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/ 

Tuttavia se uso NSFileManager:enumeratorAtURL cercare il directory torno URL del modulo:

file://localhost/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/ 

Questo mi sta causando problemi perché sto facendo ricerca URL/sostituzione manipolazioni e la differenza causa una mancata corrispondenza. In passato ho incontrato questo genere di differenze e la mia soluzione era di utilizzare il percorso degli URL (utilizzando NSURL:path) anziché gli URL non elaborati, tuttavia non funzionerebbe in questa situazione poiché i percorsi prodotti sono:

/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support 
/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support/ 

Quello che sto cercando di fare è questo: posso avere qualsiasi numero di file nella mia directory di supporto applicazioni con lo stesso nome ma posizioni diverse, e ho bisogno di estrarre il percorso relativo alla directory del supporto dell'applicazione. vale a dire se ho la seguente

/Application Support/abc/file.dat 
/ApplicationSupport/abc/def/file.dat 

Voglio essere in grado di estrarre "abc" e "abc/def". Stavo facendo questo utilizzando il seguente codice:

NSArray *keys = [NSArray arrayWithObject:NSURLIsRegularFileKey]; 
NSDirectoryEnumerator *dirEnumerator = [self.fileManager enumeratorAtURL:[MyManager appSupportDirectory] 
              includingPropertiesForKeys:keys 
                  options:NSDirectoryEnumerationSkipsHiddenFiles 
                 errorHandler:nil]; 
    for (NSURL *url in dirEnumerator) 
    { 
     if (NSOrderedSame == [[url lastPathComponent] caseInsensitiveCompare:kFilename]) 
     { 
      NSString *appSupportPath = [[MyManager appSupportDirectory] path]; 
      NSString *pathToFile = [url path]; 
      pathToFile = [pathToFile URLByDeletingLastPathComponent]; 
      NSString *subPath = [pathToFile stringByReplacingOccurrencesOfString:appSupportPath withString:@""]; 

(MyManager: appSupportDirectory chiama NSFileManager: URLForDirectory: usando NSApplicationSupportDirectory)

Questo funziona bene sul simulatore dove enumeratorAtURL: e URLFOrDirectory: ritorno percorsi identici, ma a causa della loro le differenze sull'hardware falliscono.

C'è un modo per ottenere enumeratorAtURL: e URLForDirectory: per restituire percorsi identici o, in caso contrario, esiste un modo alternativo elegante di estrarre i percorsi secondari a ciò che sto facendo attualmente?

risposta

3

ho dovuto passare a fare questo, invece:

NSDirectoryEnumerator *dirEnum = [self.fileManager enumeratorAtPath: [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"]]; 
+0

Ho avuto lo stesso problema. Il contentOfDirectoryAtURL del file manager restituisce un URL con/private /. E ho avuto problemi nel confronto con il mio record di URL nel database. – John

Problemi correlati