2010-05-10 3 views
2

В настоящее время я работаю непосредственно с Cocoa, чтобы создать экранную заставку. Теперь я столкнулся с проблемой при попытке загрузить ресурсы из пакета .saver. У меня в основном есть небольшой класс оболочки C++ для загрузки .exr файлов с использованием freeImage. Это работает до тех пор, пока я использую пути absoulte, но это не очень полезно, не так ли? Итак, в основном, я пробовал все: поместив файл .exr на уровень самого пакета .saver, внутри папки «Ресурсы» и т. Д.Использование относительных путей для загрузки ресурсов в Cocoa/C++

Тогда я просто пытался загрузить .exr, как это, но без успеха:

particleTex = [self loadExrTexture:@"ball.exr"]; 

Я также попытался сделать это пойти в место .saver пучках, как это:

particleTex = [self loadExrTexture:@"../../../ball.exr"]; 

... возможно, загрузить .exr из этого места, но безуспешно.

Затем я наткнулся на это:

NSString * path = [[NSBundle mainBundle] pathForResource:@"ball" ofType:@"exr"]; 
const char * pChar = [path UTF8String]; 

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

+0

Хорошо, я только что нашел, что NSString * path = [[NSBundle mainBundle] bundlePath]; указывает мне на экранную заставку ScreenSaver.app, поэтому я думаю, что ресурсы должны быть относительно этого? как бы я это сделал? – moka

ответ

2

Вы должны использовать NSBundle bundleWithIdentifier: вместо mainBundle, чтобы получить ссылку на свой экранный заставщик.

Из обсуждения раздел:

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

+0

Спасибо, что именно я искал! – moka

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