2012-12-21 3 views
5

-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]에는 단일 NSSearchPathDomainMask가 필요하며 단일 URL을 반환합니다. (...appropriateForURL:create:error: 부분은 설명서에서 약간 혼란 스럽습니다.)NSFileManager - URLsForDirectory ... 또는 URLForDirectory

-[NSFileManager URLsForDirectory:inDomains:]은 도메인 매개 변수에 대한 비트 마스크를 만들고 URL 배열을 반환합니다.

나에게는이 두 가지 방법이 겹치는 것으로 보입니다. 내 목표가 문서 나 라이브러리 또는 기타 디렉토리를 iOS 앱의 샌드 박스에서 가져 오는 것이면 언제 다른 것을 사용해야합니까?

답변

17

문서 디렉토리 (또는 기타 유사한 디렉토리)에 대한 액세스 권한을 얻을 수있는 표준 방법과 같은 코드는 다음

NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 
NSURL *documentsURL = URLs[0]; 

의 주요 차이점은 다음과 같습니다

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = paths[0]; 

이하고 비슷합니다 첫 번째 경로는 NSString이고 두 번째 경로는 NSURL 경로를 제공합니다.

다른 방법

을 수행하여 사용할 수 있습니다 항상 존재하기 때문에 당신은 문서 디렉토리 NO를 전달할 수 있습니다

NSURL *documentsURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; 

. 응용 프로그램 지원 디렉토리는 기본적으로 존재하지 않으므로 YES을 전달해야합니다. 그리고 이상적으로는 nil을 에러로 넘겨서는 안되며, 따라서 메소드 호출이 nil을 반환하면 어떤 일이 일어 났는지 알 수 있습니다.

이러한 세 가지 방법 중 하나가 작동합니다. 경로를 문자열로 사용하려면 1을 사용하십시오. URL로 사용하려면 3rd를 사용하십시오. 두 개 이상의 도메인을 전달할 필요가 거의없는 경우 2nd를 사용하십시오.

+4

애플의 문서에서 : NSFileManager 메소드 URLsForDirectory : inDomains와 URLForDirectory : inDomain : appropriateForURL : create : error :를 사용하는 것을 고려해야합니다. 선호하는 형식 인 URL을 반환합니다. " – edelaney05

+0

URL을 원한다면 사실입니다. 경로를 NSString으로 사용하려면 게시 한 항목이 좋습니다. – rmaddy

+0

@ edelaney05 업데이트 된 답변보기 – rmaddy

관련 문제