Swift에서 NSSavePanel 사용하기

!
경고: 이 글이 작성된 지 365일이 넘었습니다. 글의 정보가 오래되어 부정확할 수 있습니다.

요약본:

@IBAction func browseDirectory(_ sender: Any) {
    
    let dialog = NSSavePanel()
    
    dialog.title = "파일 저장"
    dialog.showsResizeIndicator = true
    dialog.canCreateDirectories = true
    dialog.showsHiddenFiles = true
    dialog.allowedFileTypes = ["txt"]
    
    if (dialog.runModal() == NSApplication.ModalResponse.OK) {
        let result = dialog.url
        
        if (result != nil) {
            let path = result!.path // 'path' 변수로 작업하기
        }
    } else {
        return // 사용자가 모달을 취소함
    }
}

파일시스템 사용 권한을 설정하는 것도 잊지 마세요.


일단 모달을 생성해야 되니까 ‘dialog’ 변수를 만들고 NSSavePanel을 추가해줍니다:

let dialog = NSSavePanel()

모달의 설정을 변경합니다. 일단 모달의 제목 바 이름을 설정하세요:

dialog.title = "파일 저장"

다음 모달 설정은 제목 바에 “크기 조절” 버튼을 보일지, 사용자가 새로운 폴더를 추가하도록 허용할지, 그리고 숨겨진 파일을 보일지 설정합니다.

dialog.showsResizeIndicator = true
dialog.canCreateDirectories = true
dialog.showsHiddenFiles = true

사용자가 특정 파일만 선택할 수 있게 하려면:

dialog.allowedFileTypes = ["php"]

마지막으로 사용자에게 모달을 보입니다:

if (dialog.runModal() == NSApplication.ModalResponse.OK) {
    let result = dialog.url
    
    if (result != nil) {
        let path = result!.path // 'path' 변수로 작업하기
    }
} else {
    return // 사용자가 모달을 취소함
}

하지만 이렇게 코드를 짜놓고 어플을 실행하면 바로 크래시가 발생합니다. 이유는 어플이 파일시스템을 사용할 수 있도록 권한을 설정하는 것을 깜빡했기 떄문입니다. 왼쪽 사이드바에 있는 프로젝트를 클릭한 후, 작은 사이드바의 “타겟” 밑의 어플을 선택하고, 권한을 설정하주면 됩니다. (제 Xcode가 영어로 설정되어 있어서 한국어 메뉴는 이름이 살짝 다를 수 있습니다.)

xcode-nssavepanel-permissions

이제 저장 모달이 완성되었습니다!

댓글