아이폰에서 쓸 수 있는 경로를 얻으려면 어떻게 해야 합니까?
다른 게시물을 위해 작성된 이에 대한 완전한 답변이 있어서 이 질문을 올립니다. 원본에는 적용되지 않지만 낭비하기에는 너무 유용하다고 생각했습니다.그래서 저는 다른 사람들이 질문과 답변을 구체화할 수 있도록 이것을 커뮤니티 위키로 만들었습니다.만약 당신이 답이 유용하다고 생각한다면, 질문에 투표해주세요. 커뮤니티 위키이기 때문에 이 투표에 점수를 받지는 않겠지만 다른 사람들이 찾는 데 도움이 될 것입니다.
아이폰에서 파일 쓰기가 허용되는 경로를 얻으려면 어떻게 해야 합니까?시뮬레이터에서 원하는 곳에 쓸 수 있지만 아이폰에서는 특정 위치에만 쓸 수 있습니다.
고려해야 할 세 가지 종류의 쓰기 가능 경로가 있습니다. 첫째는 문서(Documents)로, 보관하고 싶은 것을 저장하고 iTunes를 통해 사용자가 사용할 수 있도록 하는 것입니다(3.2 기준).
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
두 번째로, Documents 디렉토리와 매우 유사하게 Library 폴더가 있는데, 라이브러리 폴더에는 구성 파일과 쓰기 가능한 데이터베이스를 저장할 수 있으며, 이 폴더에는 사용자가 iTunes를 통해 문제를 해결하는 것을 원하지 않습니다.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
사용자가 3.2(iPad) 이전 장치를 사용하여 iTunes에서 파일을 볼 수는 없지만 NSL 라이브러리 디렉토리 상수는 iPhoneOS 2.0 이후부터 사용할 수 있으므로 3.0(또는 계속 사용 중인 경우)을 대상으로 하는 빌드에 사용할 수 있습니다.또한 사용자가 문서를 수정할 수 있도록 앱에 플래그를 지정하지 않는 한 사용자는 아무것도 볼 수 없기 때문에 오늘 문서를 사용하는 경우 사용자 문서를 지원하기 위해 업데이트할 때 위치를 변경하면 됩니다.
마지막으로 캐시 디렉터리가 있는데, 이 디렉터리를 사용하면 장기적으로 존재하든 그렇지 않든 상관없는 이미지를 넣을 수 있습니다(전화기가 삭제할 수도 있습니다).
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir == NO) {
[[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}
캐시 디렉토리를 실제로 작성해야 하므로 작성할 때는 매번 확인하고 작성해야 합니다.좀 아프긴 하지만, 그런거에요.
그런 다음 쓰기 가능 경로가 있을 때 파일 이름을 다음과 같이 추가합니다.
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"SomeDirectory/SomeFile.txt"];
아니면
NSString *filePath = [cachePath stringByAppendingPathComponent:@"SomeTmpFile.png"];
그 길을 읽거나 쓸 때 사용하세요.
위의 예제 문자열 중 하나가 사용 중인 쓰기 가능 경로(하나가 생성되었다고 가정)에서 하위 디렉터리를 만들 수 있습니다.
사진 라이브러리에 이미지를 쓰려는 경우 파일 시스템 호출을 사용하여 이 작업을 수행할 수 없습니다. 대신 메모리에 UII 이미지가 있어야 합니다.UIImageWriteToSavedPhotosAlbum()UIKit에서 정의한 함수 호출.대상 형식이나 압축 수준을 제어할 수 없으며, 이러한 방식으로 EXIF를 첨부할 수 없습니다.
위의 켄달 & 데이브 덕분에 이 수정안이 유용하다고 생각했습니다.일회성 디버그 코드에 사용할 때, Mike Ash의 NSBlog에서 임시 변수인 Dir & error를 제거하기 위해 이 트릭을 사용했습니다. 행의 수를 최소화하고 장황함을 거의 견딜 수 있도록 합니다.
NSFileHandle *dumpFileHandle = nil;
#ifdef DEBUG
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
if (![[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&(BOOL){0}])
[[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:YES attributes:nil error:&(NSError*){nil}];
NSString *dumpPath = [cachePath stringByAppendingPathComponent:@"dump.txt"];
[[NSFileManager defaultManager] createFileAtPath:dumpPath contents:nil attributes:nil];
[(dumpFileHandle = [NSFileHandle fileHandleForWritingAtPath:dumpPath]) truncateFileAtOffset:0];
#endif
if (dumpFileHandle) [dumpFileHandle writeData:blah];
언급URL : https://stackoverflow.com/questions/1567134/how-can-i-get-a-writable-path-on-the-iphone
'programing' 카테고리의 다른 글
| 정의되지 않은 함수 oci_connect() 호출 (0) | 2023.09.16 |
|---|---|
| TS1086: 주변 컨텍스트에서 액세스자를 선언할 수 없음 (0) | 2023.09.16 |
| CSS에서 "보다 크다" 또는 ">" 문자는 어떻게 사용됩니까? (0) | 2023.09.16 |
| Powershell에서 사용자 이름/암호를 사용하여 네트워크 폴더에 연결 (0) | 2023.09.16 |
| 범례 없는 판다 플롯() (0) | 2023.09.16 |