반응형
iOS 16.1, Xcode 14.2, Swift 5, UIKit 환경에서 진행했습니다.
DocumentPicker에 관한 기본적인 예제 참고 사이트
https://bksesame.tistory.com/207
DocumentPicker에서 파일을 선택할 시에 파일을 내 앱으로 저장하는 방법에 대하여 포스팅하겠습니다.
DocumentPicker에서 파일을 선택하게 되면 UIDocumentPickerDelegate에 있는 documentPicker(... didPickDocumentsAt urls:[URL]) 함수가 호출됩니다.
이 함수에서 선택한 파일의 URL이 urls 속성에 담기게 됩니다.
이 URL 주소를 통해 파일을 저장하면 됩니다.
파일 처리에 관한 예제
https://bksesame.tistory.com/211
전체코드
extension ViewController: UIDocumentPickerDelegate, UINavigationControllerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
let fileManager = FileManager.default
let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
let directoryURL = documentURL.appendingPathComponent("folder")
// 폴더 생성
do {
try fileManager.createDirectory(atPath: directoryURL.path, withIntermediateDirectories: false, attributes: nil)
} catch let e as NSError {
print(e.localizedDescription)
}
let newUrls = urls.compactMap { (url: URL) -> URL? in
var tempURL = directoryURL
tempURL.appendPathComponent(url.lastPathComponent)
do {
// 중복된 파일이 있을 경우 제거
if fileManager.fileExists(atPath: tempURL.path) {
try? fileManager.removeItem(atPath: tempURL.path)
}
// 파일 복제
try FileManager.default.moveItem(atPath: url.path, toPath: tempURL.path)
fileURL = tempURL
return tempURL
} catch {
print(error.localizedDescription)
return nil
}
}
}
}
반응형
'iOS > 코드조각' 카테고리의 다른 글
[iOS, Swift] CollectionView 예제코드(Storyboard 활용) (1) | 2023.03.08 |
---|---|
[iOS, Swift] Data 용량 크기 구하기 (0) | 2023.03.06 |
[iOS, Swift] 앱 내에 폴더 만들고 파일 저장하기(FileManager) (0) | 2023.03.04 |
[iOS, Swift] hugging priorty 및 CompressionResistancePriority 수정(programmatic) (0) | 2023.03.03 |
[iOS, Swift] TableView의 특정 셀 가져오기(indexPath) (0) | 2023.03.01 |