2012-02-17 2 views
37

내 프로젝트에서 일부 .applescript 파일을로드하려고합니다.pathForResource가 null을 반환합니다.

enter image description here

을하고 액세스하려고 :

이 같은 "지원 파일"디렉토리를 복사

NSBundle *bundle = [NSBundle mainBundle]; 
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]); 

pathForResource는 항상 null를 돌려줍니다.

두 파일 모두 xcode에서 올바르게 가져옵니다. 대상 회원은 내 앱입니다. 유사한 질문의 해결책이 도움이되지 않았습니다.

내가 뭘 잘못하고 있니? Xcode의 목표 "페이즈를 구축" "복사 번들 리소스" "아래 파일을 추가에서

답변

138

+0

간단하고 정확하게 내가 빠진 것이 었습니다. 감사! – dvcrn

+1

Xcode 4.5에서 끌어서 놓기가 여전히 파손되었습니다 (예 : Apple의 OpenGL 쉐이더를 Finder에서 프로젝트로 드래그하여 Bundle Resources 단계에 추가하지 못했습니다 (Apple이 구현하기가 어렵지 않은 이유는 무엇입니까?). – Adam

+1

Zaph에게 감사드립니다. 남은 날을 저축했습니다. –

0

는 이미지가 어떤 폴더에 해당 파일

이 경우 pathForResource:ofType:inDirectory: 방법을 시도한다고 가정 않습니다.?

Zaph 말한, 당신은 '릴리스'모드에서 실행되지 않도록 할뿐만 아니라
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files"); 
0

.

있었다

시간 어디를위한 그 설정을 되돌려 놓아야하고 기호가 제거되어 NSBundle이 경로를 해결할 수 없도록 만듭니다.

1

위의 Zaph로부터의 커다란 반응이지만, 나는 Xcode 6.1에서보다 빠른 방법이 있다는 것을 알았습니다.

파일 (예 : test.applescript)을 한 번 클릭하고 Xcode의 오른쪽 메뉴를 열면 "대상 멤버십"섹션이 표시됩니다. 올바른 대상 (스크립트를 사용하는 대상과 같음)이 선택되어 있고 "번들 리소스 복사"아래에 파일을 추가하는 것과 동일한 작업을 수행하십시오.

또한 관련이 없지만 여러 다른 장소에서로드하는 경우 또는이 클래스를 상속하는 경우 실제로 사용하면 안됩니다.

[NSBundle mainBundle];

대신 당신이 그것을 실행중인 대상과 관련된 적절한 항목에서 자원 할게요 호출하는 방법에 어디에 대해 걱정할 필요가 없습니다 의미

[NSBundle bundleForClass:[self class]]; 

를 사용합니다.)

4

여전히 경로가 없으며 파일이 "번들 자원 복사"에 추가 된 경우에는 번들 자원 복사에서 파일을 제거하고 다시 추가하십시오.

+0

정확하게 필요한 것은 ... – code4j

관련 문제