SWIFT에서 기기에 사용자의 DATA를 저장하는 방법은 두 가지가 존재합니다.
- UserDefaults
- TextFile
(1) UserDefaults
모든 앱에서는 데이터를 읽고 쓸 수 있는 각자의 샌드 박스 영역이 존재합니다. 이 영역에는 다음과 같이 딕셔너리 오브젝트를 얻어 접근할 수 있습니다.
이 오브젝트는 한 개의 앱에서 공통으로 1개만 만들 수 있습니다.
1 | let defaults = UserDefaults.standard | cs |
이는 다음과 같이 데이터를 저장하고 읽어올 수 있습니다. 여기서 data는 String 형식이라고 가정합니다.
저장
1 | defaults.set( data, forKey: "key" ) | cs |
읽기
1 | let value = defaults.String( forKey: "key" ) | cs |
(2) TextFile
만약 String이 긴 문장인 경우, UserDefaults로 저장하기에는 부담스러울 수 있습니다. 이런 경우에는 String을 TextFile에 저장하고, 불러올 수 있습니다.
기본적인 구조
NSHomeDirectory() 메소드를 이용해 앱이 이용할 수 있는 홈 디렉터리를 구한다 -> 그 아래에 저장에 사용할 파일 경로를 연결 -> 텍스트 파일 형태로 저장
1 | let path = NSHomeDirectory() + "/Documents/textFile.txt" | cs |
path 변수는 파일의 경로를 지정합니다. 이는 앱이 이용할 수 있는 홈 디렉터리 하위에 Documents 폴더를 생성한 후 textFile.txt 형태로 저장하겠다는 뜻입니다.
저장
1 2 3 4 5 6 7 8 9 10 11 | let data = textView.text //String do { try data?.write( toFile: path, atomically: true, encoding: String.Encoding.utf8 ) } catch let error as NSError { pirnt("save failed \n \(error)") } | cs |
읽기
1 2 3 4 5 6 7 8 9 | do { let data = try String( contentsOfFile: path, encoding: String.Encoding.utf8 ) } catch let error as NSError { pirnt("read failed \n \(error)") } | cs |
해당 과정에서 실패할 경우를 대비해 오류 처리(예외 처리)를 해야합니다. atomically 속성은 TRUE로 설정할 경우 데이터 저장 중 비정상적으로 종료되었을때 파일이 깨지지 않게 임시 파일을 사용해 데이터를 저장합니다.
TIP . 파일 존재 여부 검사
1 2 3 4 5 6 7 | let fileManager = FileManager.default guard ( fileManager.fileExists( atPath: path )==true ) else { retrun } | cs |
'IOS > 러닝패스' 카테고리의 다른 글
[#C3 SWIFT3] SNS 같은 FEED를 만드는 방법 (0) | 2018.12.07 |
---|---|
[#C1]스위프트와 함께하는 IOS 앱 개발 (0) | 2018.12.01 |