일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Xcode
- ribs
- 스위프트
- 리펙토링
- uitableview
- Human interface guide
- collectionview
- 리팩토링
- ios
- swiftUI
- MVVM
- clean architecture
- Protocol
- swift documentation
- UICollectionView
- RxCocoa
- Clean Code
- Observable
- 리펙터링
- map
- tableView
- 클린 코드
- UITextView
- 애니메이션
- combine
- Refactoring
- HIG
- rxswift
- SWIFT
- uiscrollview
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 2. 프로퍼티 리스트(Property List) 본문
1. 프로퍼티 리스트
1) 개념
- 객체 직렬화*를 위한 XML포맷에 맞추어 key-value형식으로 저장
(xcode project에서 info.plist역시 프로퍼티 리스트)
- 주로 앱의 공통 데이터나 주요 설정 정보를 저장하는데 사용
* 객체 직렬화 : 객체의 내용을 바이트 단위로 변환하여 파일에 기록하거나 네트워크를 통해 전달이 가능하도록 하는 것
2) 특성
- 중복된 키를 사용하면 기존의 데이터는 지워지고 덮어쓰게 됨
- 프로퍼티 리스트는 데이터 타입을 추상화하여 저장 : string은 추상화 데이터 타입 / String, NSString, CFSgtring은 구체화 데이터 타입
3) 저장 타입 (추상형을 사용하기 때문에 범용성 존재)
- 문자열 : <string>
- 숫자 : <integer>
- 실수 : <real>
- 배열 : <array>
- 딕셔너리 : <dict>
- 날짜, Base64* : <data>
* Base64 : 8bit로 된 바이너리 데이터 -> 아스키 코드
2. 프로퍼티 파일 생성(클릭으로 생성하는 방법)
1) 프로퍼티 리스트 파일 생성: cmd + N
2) key-value입력
* 이렇게 정의한 프로퍼티 리스트파일들이 저장되는 공간의 영역은 App Bundle영역
App Bundle영역은 Sandbox에 저장
- iOS의 보안정책상 애플리케이션을 쓰고 읽을 수 있는 곳은 샌드박스(sandbox), 샌드박스는 보통 애플리케이션 영역 내부에 지정
3. 프로퍼티 파일 생성(programmatically) 및 사용
1) 생성 및 저장
디렉토리 직접 접근 (선호 : .plist파일을 새로 생성할 수 있기 때문)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/// 저장될 이름 : "계정.plist"
let customPlist = "\(self.name.text!).plist"
/// .plist는 sandbox내에 존재, sandbox에는 디렉토리 전용 및 파일 전용이 따로 존재
/// 첫 번째 인수 : 디렉토리 전용, 두 번째 인수 : 애플리케이션 범위, 세 번째 인수 : 전체 경로(true)인지 디렉토리명만(false)인지
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let path = paths[0] as NSString
let plist = path.strings(byAppendingPaths: [customPlist]).first!
let data = NSMutableDictionary(contentsOfFile: plist) ?? NSMutableDictionary()
data.setValue(self.id.text!, forKey: "id")
data.setValue(self.pw.text!, forKey: "password")
data.setValue(self.name.text!, forKey: "name")
data.setValue(self.age.text!, forKey: "age")
data.write(toFile: plist as String, atomically: true)
/// .plist 파일 확인
print("plist = \n\(plist)")
|
|
2) 파일 확인
cd 경로명 후 ls- al로 데이터 확인
생성된 파일 확인
내용확인 : cat 파일명
XML형식으로 만들어진 것을 확인
2) 데이터 read
// get path
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let path = paths[0] as NSString
let plist = path.strings(byAppendingPaths: ["data.plist"])[0]
let data = NSmutableDictionary(contentsOfFile: plist)
// read
let name = data?.value(forKey: "이름") as? String
let age = data?.value(forKey: "나이") as? Int
출처: https://effectivecode.tistory.com/615 [Mr.후]
4. 사용 (Bundle.main으로 접근 - 템플릿에 접근하는 방법)
- Property List에서 데이터 타입을 지정(Model)하여 이 템플릿을 사용하는 방법
1) 템플릿 정의
2) User.plist파일 참조, read
- plist파일이 저장되는 곳인 Bundle영역 접근, 3번라인
1
2
3
4
5
6
7
8
9
10
11
12
|
/// Property List Template Method
self.defaultPlist = NSDictionary() /// var defaultPlist: NSDictionary!
if let defaultPlistsPath = Bundle.main.path(forResource: "User", ofType: "plist") {
self.defaultPlist = NSDictionary(contentsOfFile: defaultPlistsPath)
/// 최초로 받을 땐 NSDictionary, 새로운 객체는 수정이 가능하게끔하기 위해 Mutable사용
let data = NSMutableDictionary(contentsOfFile: defaultPlistsPath) ?? NSMutableDictionary(dictionary: self.defaultPlist)
// data.setValue(...)
// data.write(toFile: defaultPlistsPath, atomically: true)
}
|
'iOS 실전 (swift) > 데이터베이스' 카테고리의 다른 글
[iOS - swift] 6. SQL 4가지 쿼리문 형태 (0) | 2020.05.09 |
---|---|
[iOS - swift] 5. 관계형 데이터 베이스(RDBMS)의 개념 (0) | 2020.05.09 |
[iOS - swift] 4. Login정보 저장하기 (로컬) UserDefaults, Property List (0) | 2020.05.05 |
[iOS - swift] 3. UserDefaults (0) | 2020.05.05 |
[iOS - swift] 1. 데이터베이스 (Realm) (0) | 2020.04.07 |