Как получить путь к файлу в приложении для iPhone - PullRequest
37 голосов
/ 17 июня 2011

У меня проблема с доступом к моим файлам в моем приложении.

В настоящее время я использую

//Directly from TileMap example from WWDC2010
NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath] 
                           stringByAppendingPathComponent:@"Tiles"];

для доступа к своим плиткам для моего MKOverlay.Это дает мне этот каталог

/ Users / xxxx / Библиотека / Поддержка приложений / iPhone Simulator / 4.2 / Applications / 9D62025C-C53B-472C-8309-xxxx / xxxx.app / Tiles

Символ «х» предназначен только для конфиденциальности

У меня есть плитки в папке с именем Tiles в корне моего приложения, которая находится в Xcode в группе под названием Tiles, который находится непосредственно в группе Resources.

Когда я запускаю свое приложение, я получаю простую ошибку, говорящую о том, что оно не может найти мои плитки в сгенерированном каталоге (та цитата выше), если язамените этот кусок кода и сделайте его:

NSString *tileDirectory = @"/Users/xxxx/Documents/xxxx/Tiles";

Тогда мое приложение работает нормально.Это очевидно, потому что он находит мои плитки в своем прямом расположении на моем Mac.Это хорошо для тестирования, но мне нужно, чтобы он работал на моем iPhone / iPad.

Эта проблема может возникать из-за:

  • Сгенерированный каталог неверен.
  • Изображения листов не включаются в построенный файл .app.

В любом случае, я понятия не имею, что делать, чтобы решить эту проблему.

Какя могу решить эту проблему?


[РЕДАКТИРОВАТЬ]

Я изменил этот кусок кода на:

NSString *tileDirectory = [[NSBundle mainBundle] resourcePath];

Теперь это работаетв симуляторе, потому что все файлы находятся в корневой папке приложений, и я не прошу его ввести другой каталог с именем "Tiles".

Это выполняется без ошибок на симуляторе, но когда на моем iPhone этовыдает исходную ошибку (просто другой путь к файлу, но также заканчивающийся /xxxx.app

Как я могу обеспечить каталог в файле моего приложения, такой как xxxx.app/Tiles - это делает TileMap.

Ответы [ 5 ]

44 голосов
/ 04 октября 2012

Поскольку это ваши файлы в комплекте приложений, я думаю, вы можете использовать pathForResource:ofType:, чтобы получить полный путь к вашему файлу.

Вот пример:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"your_file_name" 
                                            ofType:@"the_file_extension"];
19 голосов
/ 17 июня 2011

Помните, что «папки / группы», которые вы создаете в xcode, те, которые являются желтоватыми, не отражаются как реальные папки в вашем приложении для iPhone.Они только для того, чтобы структурировать ваш проект XCode.Вы можете вкладывать столько желтых групп, сколько хотите, и они по-прежнему служат только для организации кода в XCode.

EDIT

Создайте папку вне XCode, затем перетащите ее и выберите "«Создать ссылки на папки для любых добавленных папок» вместо «Создать группы для любых добавленных папок» во всплывающем окне.

11 голосов
/ 17 июня 2011

Если ваши плитки не находятся в вашем пакете, либо скопированы из пакета, либо загружены из Интернета, вы можете получить каталог, подобный этому

NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *tileDirectory = [documentdir stringByAppendingPathComponent:@"xxxx/Tiles"];
NSLog(@"Tile Directory: %@", tileDirectory);
1 голос
/ 07 ноября 2015

Вам необходимо использовать URL для ссылки, например:

NSURL *path = [[NSBundle mainBundle] URLForResource:@"imagename" withExtension:@"jpg"];

Это даст вам правильный URL-адрес.

0 голосов
/ 17 июня 2011

Вы должны добавить свои плитки в ваш пакет ресурсов.Я имею в виду добавить все эти файлы в ваш проект, убедитесь, что вы скопировали все файлы в опцию каталога проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...