2013-07-31 3 views
0

다음을 사용하여 viewDidLoad에서 번들 개체를 초기화하고 있습니다.iOS : 폴더를 제거하고 다시 만든 후에 NSBundle 개체가 유효하지 않게됩니다.

documentBundle = [[NSBundle alloc] initWithPath:path]; 

여기서 path는 다음과 같습니다.

/Users/..../Library/Application Support/iPhone Simulator/6.1/Applications/B69B8A03-C029-4DF5-89E0-1429E73E840F/Documents/Downloads/documents.bundle 

응용 프로그램을 실행하는 동안 documents.bundle을 업데이트하고 이전 버전을 제거해야합니다. 그래서 그것을 제거하고 웹에서 최신 것을 다운로드하십시오. 번들 객체가 같은 폴더를 가리키고 있지만 기존 폴더를 바꾼 후 그 번들 안에 내용을 가져올 수 없음을 확인했습니다. 응용 프로그램을 다시 시작하면 최신 내용을 얻습니다! 나는 여기서 무슨 일이 일어나고 있는지 확신하지 못한다. 어떤 사람이 잘못 될 수있는 것을 지적 할 수 있습니까?

반품 다음 번들을 교체 한 후 무 경로입니다! 필요한 파일이 터미널에서 바로 볼 수 있습니다!

NSString *path = [documentBundle pathForResource:filename ofType:extension]; 

는 I는 번들을 대체 한 후 다발 객체를 재 초기화하기 위해 시도하지만, 여전히 그것 (%의 P를 사용하여 인쇄)와 동일한 메모리 어드레스를 가리키는 새로운 번들로부터 콘텐츠를 반환하지 않는다.

디바이스와 시뮬레이터 모두에서 동일한 결과가 나타납니다.

답변

0

NSBundle은 객체를 인스턴스화하는 동안 파일 시스템을 기억합니다. 그 후 그 폴더에 추가 된 새 파일을 인식하지 못합니다! 폴더를 제거하고 같은 이름으로 새 폴더를 다시 만들면 폴더가 인식되지 않습니다. NSBundle은 항상 Documents 디렉토리를 가리키고 [pathForResource : filename ofType : extension inDirectory : directory]를 사용했지만 디렉토리를 바꿀 때도 작동하지 않습니다. 즉, 파일 시스템이 동일한 이름을 사용하여 동적 인 경우 NSBundle을 처리하지 마십시오!

새로운 다운로드마다 현재 타임 스탬프 폴더를 만들고 이전 폴더를 제거한 다음 NSBundle 개체를 다시 설정하여 해결책을 찾았습니다. 이제는 실제로 존재하지 않았던 것처럼 올바르게 작동하고 만듭니다. 자세한 내용은 Apple documents on NSBundle을 참조하십시오.