2015-09-18 2 views
1

Мне нужно получить доступ к файловым «данным» внутри содержимого файла пакета, который является файлом проекта, используемым другим приложением. Пакет может находиться в любом месте на любом доступном томе. SO в моем приложении Я прошу пользователя найти его проект, поэтому я получаю путь к проекту. Структура внутри файла проекта всегда одна и та же. Таким образом, я мог бы найти файл данных, добавив базовый путь проекта к пути его каталогов содержимого до файла данных.Доступ к файлам внутри пакета с NSURL

Но когда я печатаю путь, получаю все каталоги в порядке, но имя файла пакета снимается. Если я печатаю только базовый путь, я получаю правильный путь, включая пакет в конце. Он, как и его состояние, появляется в середине пути.

Я также пробовал [NSBundle bundleWithPath], но он возвращает nul. Хотя искатель не рассматривает файл проекта как пакет, а как файл пакета, это был всего лишь последний звонок в отчаянии.

Вот код:

` NSOpenPanel *getPath = [NSOpenPanel openPanel]; 
NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"logicx", nil]; 
[getPath setCanChooseFiles:YES]; 
[getPath setCanChooseDirectories:NO]; 
[getPath setTreatsFilePackagesAsDirectories:NO]; 
[getPath setTitle:@"Select your Logic Pro X project file"]; 
[getPath setAllowedFileTypes:fileTypes]; 
[getPath setCanCreateDirectories:YES]; 



NSInteger clicked = [getPath runModal]; 
if (clicked == NSFileHandlingPanelOKButton) { 
    for (NSURL *basePath in [getPath URLs]){ 

     NSURL *url = [NSURL URLWithString:(@"Alternatives/000/ProjectData") relativeToURL:basePath]; 

// "Альтернативы/000/сотрудничестваСбор" является Подпуть из файла пакета

 NSURL *absURL = [url absoluteURL]; 


     NSLog(@"absURL = %@",absURL); ` 

Проект имя файла пакета является: «Track Patch. logicx»

Если я печатаю basePath я получаю: file:///Volumes/Media/Music/Logic/Track%20Patch.logicx

Если я печатаю absURL, который является искомым путем, я получаю absURL = file:///Volumes/Media/Music/Logic/Alternatives/000/ProjectData

Патч Патч был отброшен здесь.

Если я напечатать URL (указатель) я получаю это absURL = Alternatives/000/ProjectData -- file:///Volumes/Media/Music/Logic/Track%20Patch.logicx

Таким образом, путь переворачивается, который заставляет меня думать, есть проблема с функцией [NSURL URLWithString: relativeToURL:basePath];. что значит --?

Любая помощь будет принята с благодарностью.

+0

Я действительно путают о том, что вы спрашиваете. Является ли„Альтернативы/000/сотрудничестваСбор“подпуть вы хотите взглянуть на внутри упаковки? –

+0

Да exaclty, извините, если я не clrear достаточно, я собираюсь отредактировать сообщение, чтобы сделать это ясно. спасибо – user306147

ответ

0

В документации для URLWithString:relativeToURL: указано, что для этого требуется обратная косая черта - это каталог.

«вы можете построить URL для файла, предоставляя URL в папках в качестве базового пути (с лидирующим слэшем)»

Вы можете решить эту проблему с помощью метода URLByAppendingPathComponent вместо этого, как так:

NSURL *url = [basePath URLByAppendingPathComponent:@"Alternatives/000/ProjectData"]; 

«Если исходный URL не заканчивается с косой чертой и pathComponent не начинается с форвардом косой чертой, косой чертой является , вставленная между двумя частями возвращаемого URL, если исходный URL - это пустая строка."

NSURL Documentation

+1

Спасибо, Джастин, это исправил его;) И еще раз спасибо за то, что нашли время, чтобы объяснить, почему моя функция не подходит! – user306147

Смежные вопросы