Если я извлечу файл поддержки приложений Sandbox с помощью NSFileManager:URLForDirectory
, я вернусь к следующему URL-адресу:
file://localhost/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
Однако, если я использую NSFileManager:enumeratorAtURL
для поиска в каталоге, я возвращаю URL-адреса формы:
file://localhost/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
Это вызывает у меня проблемы, потому что я выполняю манипуляции с поиском и заменой URL-адресов, а разница вызывает несоответствие. Я столкнулся с такой разницей ранее в другом месте, и тогда мое решение должно было использовать путь URL-адресов (используя NSURL:path
) вместо необработанных URL-адресов, однако это не будет работать в этой ситуации по мере создания следующих путей:
/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support
/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support/
Что я пытаюсь сделать, так это: у меня может быть любое количество файлов в моем каталоге поддержки приложений с тем же именем, но в разных местах, и мне нужно извлечь путь относительно каталога поддержки приложений. т.е. если у меня есть следующий
/Application Support/abc/file.dat
/ApplicationSupport/abc/def/file.dat
Я хочу иметь возможность извлекать "abc" и "abc/def". Я делал это, используя следующий код:
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 вызывает NSFileManager: URLForDirectory: с помощью NSApplicationSupportDirectory)
Это отлично работает на симуляторе, где enumeratorAtURL:
и URLFOrDirectory:
возвращают одинаковые пути, но из-за их различий в аппаратном обеспечении он терпит неудачу.
Есть ли способ получить enumeratorAtURL:
и URLFOrDirectory:
для возврата идентичных путей, или если нет альтернативного элегантного способа извлечения подпутей к тому, что я сейчас делаю?