2011-02-16 1 views
11

내 앱에 디렉토리와 파일이 많이 있습니다 (예 : images/misc/mainmenu_background.). 나는 "아이 패드 시뮬레이터 3.2"에 다음 코드를 실행 해요 :NSBundle pathForResource는 하위 디렉토리로 nil을 반환합니다.

NSString *images = [[NSBundle mainBundle] pathForResource:@"images" ofType:nil]; 
NSString *images_misc = [[NSBundle mainBundle] pathForResource:@"images/misc" ofType:nil]; 
NSString *images_misc_file = [[NSBundle mainBundle] pathForResource:@"images/misc/mainmenu_background.png" ofType:nil]; 

이 호출 한 후, images 경로 /Users/wic/Library/Application Support/iPhone Simulator/3.2/Applications/8F67150B-71E6-4735-8CC6-38B3CE6D3568/Foo.app/images가 포함되어 있습니다.

그러나 images_miscimages_misc_filenil입니다. 파일 시스템에 파일이 있는지 다시 확인하십시오.

$ ls -l "/Users/wic/Library/Application Support/iPhone Simulator/3.2/Applications/8F67150B-71E6-4735-8CC6-38B3CE6D3568/Foo.app/images/misc/mainmenu_background.png" 
-rw-rw-rw- 1 wic staff 30307 16 Feb 21:09 /Users/wic/Library/Application Support/iPhone Simulator/3.2/Applications/8F67150B-71E6-4735-8CC6-38B3CE6D3568/Foo.app/images/misc/mainmenu_background.png 

분명히 파일이 있습니다.

"iPad Simulator 4.0"으로 전환하거나 다른 시뮬레이터 버전을 사용하면 모든 것이 예상대로 작동합니다.

설정에 이상이 있습니까? 아니면 iPad 3.2에서 NSBundle의 올바른 동작입니까? 불행히도 실제 실제 iPad를 테스트하지 않았습니다.

답변

21

디렉토리의 파일에 액세스해야하는 경우 -[NSBundle pathForResource:ofType:inDirectory:]을 사용해야합니다. 그래서 코드 대신이 이미 대답되었지만, 나는 -[NSBundle pathForResource:ofType:inDirectory:]이 아이폰 시뮬레이터 또는 iPad 시뮬레이터 또는 장치 여부에 따라 다른 대소 문자 구분을 가지고 추가하고 싶습니다

NSString *images_misc_file = [[NSBundle mainBundle] pathForResource:@"mainmenu_background" ofType:@"png" inDirectory:@"images/misc"]; 
+0

감사합니다. 'inDirectory'를 사용하면 효과가있는 것 같습니다. 하지만 이것은 이후 버전에서 작동하는 것처럼 동작이 (자동으로) 변경되었음을 의미합니다. 맞습니까? –

+0

"pathForResource :"매개 변수에 주어진 전체 경로를 처리하는 방법을 변경 한 것처럼 들리지만 4.0 이상 만 지원하는 경우에도 API를 올바르게 사용하고 모든 디렉토리에 대해 'inDirectory :'매개 변수를 사용하는 것이 좋습니다 . –

+0

기록을 위해, 그것은 그것을 사용하는 프레임 워크입니다. 이상하게도 사과는 어떤 행동으로도이 행동을 바 꾸었습니다. –

10

처럼 보일 것입니다. 예를 들어 iPhone Simulator 4.0에서는 대소 문자를 구분하지 않는 반면 iPad Simulator 3.2에서는 대소 문자를 구분합니다. 따라서 iPhone 4.0 시뮬레이터에서 발견 된 파일은 IPad Simulator 3.2 또는 해당 장치가 일치하지 않는 경우 장치에서 발견되지 않을 수 있습니다.

+3

메모 주셔서 감사합니다. 대소 문자를 구별하여 차이가났습니다. –