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?
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