2015년 12월 22일 화요일

NSFileManager 디렉터리 작업 및 Image save & load @@ in Swift2.x - Xcode 7.3 iOS 9.3

NSFileManager?

 - NSFileManager 클래스는 생성, 이동, 파일 읽고 쓰기, 파일 속성 읽기 및 설정 등
   기본적인 파일, 디렉터리 작업을 수행

 - 현재 작업 디렉터리 확인, 새로운 디렉터리로 변경, 디렉터리 생성 및 디렉터리의 내용 확인
   등의 메서드 지원



   <디렉터리에 관련된 몇가지 주요 메서드 및 속성입니다. 직접 출력 하여 확인하면 도움이 됩니다>
      
   //default NSFileManager 객체에 대한 참조체 얻기
   let filemgr = NSFileManager.defaultManager()
   *객체 참조체를 얻으면 파일과 디렉터리에 대한 작업 수행 가능
        

   //현재 작업 디렉터리 확인
   let currentFilepath = filemgr.currentDirectoryPath

   //Documents 디렉터리 확인
   let dirpaths = 
NSSearchPathForDirectoriesInDomains(.DocumentationDirectory, .UserDomainMask, true)
   let docsDir = dirpaths[0] as String
   * 위 코드를 실행하면 Documents 디렉터리 경로는 docsDir에 할당
        
   //임시 디렉터리 확인
   let tmpDir = NSTemporaryDirectory()


이제 NSFileManager를 이용하여 임의이미지를 디렉터리에 저장하고 로드 하는 작업을 시작하겠습니다.

1. 스토리보드에 이미지가 들어갈 imageView 와 함수를 실행할 버튼 추가

  1) imageView 아울렛 추가

  < @IBOutlet weak var MyImageSetUIImageView!>





  2) UIbutton 의 Action 추가



 @IBAction func imagesaveButton(sender: AnyObject{
  //이미지 저장 함수 실행
   saveImage ( newImage!, path: imagePath )
 }


 @IBAction func imageloadButton(sender: AnyObject{
  //이미지 로드 함수 실행

  MyImageSet.image = loadImageFromPath(fileInDocumentsDirectory("saveImage"))


 }



2.이미지 파일 path 설정 및 저장 

 임의 이미지를 사용합니다.(이미지 이름 -> image.png)
 imagePickerController 를 사용하여 카메라나 앨범의 이미지를 불러와 사용하세요


// 임의 이미지 객체 생성   

   let newImage =  UIImage(named: "image.png")

// 저장될 파일 이름 

   let filename = "saveImage"

// 저장될 파일 path 지정 (
fileInDocumentsDirectory 함수 리턴 값)
   let imagePath = fileInDocumentsDirectory(filename)




3. 함수 생성

//파일 Documents URL 로드 함수
func getDocumentsURL() -> NSURL {


  /*
    .stringByAppendingPathComponent  대신  .URLsForDirectory 사용
    현재 어플리케이션의 Documents 디렉터리를 확인 할수 있다
  */ 
 letdocumentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
 return documentsURL   
}

// 디렉터리에 지정했던 이름으로 파일 생성 함수

func fileInDocumentsDirectory(filenameString) -> String {
  let fileURL = getDocumentsURL().URLByAppendingPathComponent(filename)
  return fileURL.path!


}
// 이미지 저장 함수
 func saveImage (imageUIImagepathString ) -> Bool{
  // 파일 저장 타입 선택 (png, jpeg)
   let pngImageData = UIImagePNGRepresentation(image)
 //let jpgImageData = UIImageJPEGRepresentation(image, 1.0)  
   let result = pngImageData!.writeToFile(path, atomically: true)
   return result  
 }
    
//이미지 로드 함수
 func loadImageFromPath(pathString) -> UIImage? {
   let image = UIImage(contentsOfFile: path) 
        if image == nil {
            print("missing image at: \(path)")
        }
   print("Loading image from path: \(path)")
   return image
}



빌드 후 이미지 저장 버튼을 누른 후 로드 버튼을 누르면 이미지가 로드 되는 것을 확인 할 수 있습니다.
디버깅 창엔 아래 처럼 파일 경로가 나타납니다.


missing image at: /Users/<user name>/Library/Developer/CoreSimulator/Devices/<Device ID>/data/Containers/Data/Application/<app ID>/Documents/saveImage



Loading image from path: /Users/<user name>/Library/Developer/CoreSimulator/Devices/<Device ID>/data/Containers/Data/Application/<app ID>/Documents/saveImage

지금까지 NSFileManager를 디렉터리 작업을 수행함과 동시에 이미지을 저장하고 로드 하였습니다.
Foundation Framework는 파일과 디렉터리 관련 작업을 위해
NSFileManager 외 NSFileHandle, NSdata 클래스를 제공합니다.
공부하시면 좋을듯 합니다.









추천 게시물

애플 개발자 등록방법 2016년 5월 8일 기준!!

애플 개발자 등록 절차 1. 개발자 등록 페이지 이동    애플 개발자 로그인 > Account 페이지 이동 > 하단 영역 클릭 (이미지 참조)   >> Enroll 클릭 >> 무조건 승인!! ...