2010-05-10 4 views
2

저는 현재 처음으로 코코아와 직접 스크린 세이버를 만들었습니다. 이제 .saver 번들 내에서 리소스를로드하려고 할 때 문제가 발생했습니다. 기본적으로 freeImage을 사용하여 .exr 개의 파일을로드하는 작은 C++ 래퍼 클래스가 있습니다. 아볼 루스 경로를 사용하는 한 이것은 효과가 있지만 그다지 유용하지 않습니다. 그래서, 기본적으로, 나는 모든 것을 시도했다 : .exr 파일을 .saver 번들 자체, 번들 리소스 폴더 등의 레벨에 놓는다. Cocoa/C++에서 상대 경로를 사용하여 리소스로드

그때 나는 단순히이 같은 .exr를로드하려고했으나 성공하지 : 나는 또한이 같은 .saver 번들 위치로 이동하고 노력

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

:

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

... 해당 위치에서 .exr을로드 할 수도 있지만 성공하지는 못합니다. 코코아의 자원을 찾을 수있는 일반적인 방법으로 보인다 ...

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

을하지만, 어떤 이유로 내 경우에는 비어 :

나는 다음이 가로 질러왔다. 그것에 관한 어떤 생각? 나는 성공없이 내 마음에 온 것을 시험해 봤기 때문에 약간의 정보를 얻게되어 기쁩니다!

+0

좋아, 방금 NSString * 경로 = [[NSBundle mainBundle] bundlePath]; 내 스크린 세이버를 실행하는 ScreenSaver.app에 나를 가리킨다. 그래서 나는 리소스가 그것과 관련 될 필요가 있다고 생각한다. 내가 어떻게 그럴 수 있니? – moka

답변

2

화면 보호기 번들에 대한 참조를 얻으려면 mainBundle 대신 NSBundle bundleWithIdentifier:을 사용해야합니다. 토론 섹션에서

:

이 방법은 일반적으로 런타임에 자신의 번들을 찾을 수 프레임 워크와 플러그인에 의해 사용된다. 이 메서드는 bundleForClass : 메서드를 사용하여 번들을 찾으려고 시도하는 것보다 다소 효율적일 수 있습니다.

+0

고마워요. 제가 찾고 있던 것이 맞습니다! – moka

관련 문제