Различия в путях к файлам iOS между устройством и симулятором

Это похоже на этот вопрос: >Имя/путь файла изображения iOS Objective-C отличается поведением между симулятором и устройством

У меня есть следующий путь в Xcode, где Landscape — это папка, а не группа:

Resources/Landscape/clouds_high.png

Оба они загружают изображение в симулятор:

// Version A. Should only work for Groups, where image is in root
[CCSprite spriteWithFile:@"clouds_high.png"];
// Version B. Should work for my case (with a Landscape Folder)
[CCSprite spriteWithFile:@"Landscape/clouds_high.png"];

Однако, как и ожидалось, на iOS-устройстве работает только второй. Я знаю о различиях в случаях, вызывающих подобные вещи, но почему первая версия с недопустимым путем все еще работает в симуляторе?

Для справки, если я создам дубликат clouds_high.png только в каталоге Resources, то симулятор выберет эту версию вместо оригинала в Landscape для версии A. Использование версии B заставляет симулятор выбрать версию в Landscape, как и ожидалось. Но, как я упоминал ранее, устройство iOS работает только с путем, указанным относительно Resources. Почему это?


person Aram Kocharyan    schedule 30.12.2011    source источник
comment
Какова файловая структура в целевой папке .app, лежит ли clouds_high.png только в папке Landscape? (щелкните правой кнопкой мыши приложение на панели «Продукты», откройте в Finder и отобразите содержимое пакета). И еще один вопрос: такое же поведение после удаления приложения из Симулятора и устройства и очистки проекта?   -  person brigadir    schedule 30.12.2011
comment
Да, единственный экземпляр этого файла во всем приложении находится в папке Landscape. И да, пробовал чистить и удалять.   -  person Aram Kocharyan    schedule 30.12.2011


Ответы (1)


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

[[NSBundle mainBundle] pathForResource:@"clouds_high" ofType:@"png"];

Для вашего случая:

[CCSprite spriteWithFile:[[NSBundle mainBundle] pathForResource:@"clouds_high" ofType:@"png"]];
person Vlad    schedule 30.12.2011
comment
Это возвращает (null)... Не знаю, почему. - person Aram Kocharyan; 30.12.2011
comment
какая часть возвращает ноль? - pathForResource:ofType: или - spriteWithFile: ? - person Vlad; 30.12.2011
comment
NSLog(@"%@", [[NSBundle mainBundle] pathForResource:@"clouds_high" ofType:@"png"]); дал (null) - person Aram Kocharyan; 31.12.2011
comment
Это означает, что вы неправильно включили ресурс в свой проект. У меня это работает, независимо от того, в каком каталоге или подкаталоге в комплекте я копирую файл. И в качестве рекомендации, когда вы добавляете файлы, выберите относительно проекта из вариантов. - person Vlad; 09.01.2012