Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- MVVM
- 리팩토링
- Xcode
- 리펙터링
- 클린 코드
- ribs
- rxswift
- Human interface guide
- 스위프트
- Refactoring
- collectionview
- clean architecture
- map
- Observable
- HIG
- ios
- uitableview
- uiscrollview
- Protocol
- swift documentation
- RxCocoa
- SWIFT
- swiftUI
- Clean Code
- combine
- 애니메이션
- tableView
- UICollectionView
- 리펙토링
- UITextView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 4. Login정보 저장하기 (로컬) UserDefaults, Property List 본문
iOS 실전 (swift)/데이터베이스
[iOS - swift] 4. Login정보 저장하기 (로컬) UserDefaults, Property List
jake-kim 2020. 5. 5. 20:26* property list와 UserDefaults의 쓰임
- UserDefaults : 앱 전체에서 사용되는 공통 데이터, 데이터 양이 적은 경우
cf) 데이터가 대규모이면 SQLite, Realm, core data사용
1. DB 활용
2. UI 구성
3. 구현 (가급적이면 Property List의 템플릿 사용 - 4번 참고)
1) Create :
- UserDefaults : 여러 계정명
- Property List : 개인 개정 정보
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
32
33
34
35
36
37
|
/// "add acount" 버튼의 터치 이벤트
@objc func addAccount(_ sender: Any) {
guard let name = name.text else {return}
////////////// UserDefaults ///////////
let obj = UserDefaults.standard
/// nil의 가능성이 있기 때문에 '??'연산자 이용
var savedAccountList = obj.array(forKey: "accountList") ?? [String]()
savedAccountList.append(name)
obj.set(name, forKey: "selectedAccount")
obj.synchronize()
////////////// Property List ///////////
/// 저장될 이름 : "계정.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) Read :
- Create와 동일하며 데이터를 가져오는 방법만 다름
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// viewDidLoad()
//////// read - 마지막에 로그인 했던 사용자의 정보 불러오기 /////
////////////// UserDefaults ///////////
let obj = UserDefaults.standard
if let name = obj.string(forKey: "selectedAccount") {
self.name.text = name
let customPlist = "\(name).plist" /// file name for the read data
////////////// Property List ///////////
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let path = paths[0] as NSString
let plist = path.strings(byAppendingPaths: [customPlist]).first!
let data = NSDictionary(contentsOfFile: plist)
/// 앱을 다시 실행시키면 name부분과 age부분이 이전에 실행했던 정보 그대로 등록
self.name.text = data?["name"] as? String
self.age.text = data?["age"] as? String
}
|
4. 템플릿 사용 : Property List에서 데이터 타입 지정
- 템플릿이 없다면 각 계정마다 다른 속성이 존재할 수 있기 때문에 통일성을 위해서 일종의 틀(Model)을 사용
아래 링크의 4번 참고
'iOS 실전 (swift) > 데이터베이스' 카테고리의 다른 글
[iOS - swift] 6. SQL 4가지 쿼리문 형태 (0) | 2020.05.09 |
---|---|
[iOS - swift] 5. 관계형 데이터 베이스(RDBMS)의 개념 (0) | 2020.05.09 |
[iOS - swift] 3. UserDefaults (0) | 2020.05.05 |
[iOS - swift] 2. 프로퍼티 리스트(Property List) (0) | 2020.05.05 |
[iOS - swift] 1. 데이터베이스 (Realm) (0) | 2020.04.07 |
Comments