2016-07-30 15 views
1

나는 간단한 스크린 세이버를 만들려고 노력하고있다. 먼저 애셋 카탈로그에서 [[NSImage imagedNamed:]] 메서드를 사용하여 이미지를로드하면 nil 값이 반환되어 이미지를 찾을 수 없다는 것을 의미합니다. [[NSBundle mainBundle]URLForImageResource:] 메서드를 사용하여 이미지를 번들에서 직접로드하려고하면 아무 것도 얻지 못합니다. 나는 이것이 왜 일어나는 지 이해하지 못한다. 이미지는 자산 카탈로그에 있으며 프로젝트 설정에서 번들 리소스로 설정했습니다.왜 자산 카탈로그에있는 이미지를로드 할 수 없습니까?

+0

'[NSImage imageNamed :]'는 애셋 카탈로그가 아닌 앱 번들 내의 이미지에 액세스하기위한 것입니다. 앱 번들에 이미지를 넣을 수없는 이유는 무엇입니까? – Droppy

+1

나는 망막과 비 망막 맥에 대한 내 이미지의 버전을 최적화 했으므로 자산 카탈로그가 가장 좋은 방법이라고 생각했습니다. 물론 이미지를 앱 번들에 직접 넣을 수는 있지만 작동하지 않습니다. – ok404

답변

0

나는 인터넷에서 검색을 계속 한 후 스크린 세이버가 일종의 플러그인으로 실행되고 메인 번들을로드함으로써 시스템 기본 설정 번들을로드했는데 이는로드를 통해 내 리소스를 가져올 수 없음을 의미합니다. main bundle 대신 bundleIdentifier 나 번들이 저장된 경로로 번들을로드해야한다. 그래서 내 코드는 이제 다음과 같습니다

NSBundle*bundle=[NSBundle bundleWithIdentifier:@"com.myname.APOD"]; 
NSImage*image=[[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"appimage" ofType:@"png"]]; 
0

당신을 할 수있는 이름으로 자산 카탈로그에서 액세스 이미지, 그러나 NSImageimageNamed: 방법을 사용하지 않는 - 대신 이미지 리소스 번들을 조회 할 수 있습니다

을 특정 이름, 예 : 당신이하고자 이미지를 요청하는 클래스의 번들에서 이미지를 찾을 수 :

MyImageName 당신이 당신의 자산 카탈로그에 이미지를 할당 된 이름을 참조
NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
NSImage *myImage = [bundle imageForResource:@"MyImageName"]; 

.