k-coding
User Default 본문
User Default
어플리케이션을 만들다보면 데이터를 저장하고 다시 불러오는 과정을 해야 할 때가 정말 많다.
그치만 그냥 하면 당연하게도 저장이 되지 않는다
데이터를 저장하기 위해 여러가지 방법이 있지만 코어 데이터니,서버 DB니 다 너무 어려워
난 그냥 간단하게 저장하고 싶다고..!! 이럴때 사용하는게 UserDefault되시겠다.
우선 간단하게 다음과 같이 스토리보드를 한번 구상해보자
자 내 설계는 좌측 ViewController의 버튼을 누르면 우측 ViewController로 이동하고
TextField에 글을 쓰고 Button을 누르면 아래에 있는 Label에 글이 바뀌고 저장되어야한다.
그러기 위해서 코드도 물론 작성해보았다.
import UIKit
class SecondViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
@IBOutlet weak var textField: UITextField!
var saveText: String!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func saveButton(_ sender: UIButton) {
saveText = textField.text
textLabel.text = saveText
}
}
대망의 결과는?
..... 왜 화면을 껐다가 나오면 저장이 되질 않네...??
이럴때 UserDefault를 활용하자 !
UserDefault를 쉽게 말하면 데이터 저장소라고 생각하면된다.
내부적인 plist 파일에 데이터를 저장하여 어플리케이션 내 어디든 데이터를 읽고 저장할 수 있다.
그치만 물론 간단한만큼 보안상으론 굉장히 취약하다는점!!
UserDefault에 특이한 점은 set을 통하여 key, value를 사용한다는 점이다
위에 있던 코드를 다음과 같이 바꾸어보자
import UIKit
class SecondViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
@IBOutlet weak var textField: UITextField!
var saveText: String = ""
override func viewDidLoad() {
super.viewDidLoad()
// 데이터 불러오기
textLabel.text = UserDefaults.standard.string(forKey: "save")
}
@IBAction func saveButton(_ sender: UIButton) {
saveText = textField.text ?? ""
// 데이터 저장
UserDefaults.standard.set(saveText, forKey: "save")
textLabel.text = saveText
}
}
다음과 같이 UserDefaults.standard를 사용해서 저장하고 실행한다면??
다음과 같이 잠깐 화면을 나갔다가 다시 들어가도 그대로 데이터가 저장되어있는 모습이다!!
이 UserDefaults는 어플리케이션을 종료해도 그 데이터가 그대로 남아있고,
데이터를 따로 삭제하는 코드를 넣는것이 아니라면
어플리케이션을 삭제했다가 다시 깔아야 데이터가 말끔히 지워진다!
내가 만든 간단한 String뿐만 아니라 배열이나 Int,Float 심지어 switch의 On/Off등등도 다 비슷하게 저장이 가능한
UserDefaults 프로젝트 앱을 만들때 많이 사용될것 같으니 꼭 알아둡시다!
'iOS > Xcode' 카테고리의 다른 글
Xcode CollectionView 콜랙션 뷰 ( 2 ) (0) | 2022.02.04 |
---|---|
Xcode CollectionView 콜랙션 뷰 ( 1 ) (0) | 2022.02.03 |
tableView 그리고, searchBar (0) | 2022.01.25 |
화면 전환 (2) | 2022.01.18 |
Xcode 오토레이아웃 (AutoLayout) (4) (0) | 2022.01.13 |