꾸준히 안타치기
userDefault로 데이터 저장하고 가져오기, 내림차순정렬 본문
반응형
기본사용법
// userDefault에 저장
let plist = UserDefaults.standard
plist.setValue(userID, forKey: "name")//이름이라는 키로 저장
plist.synchronize()//동기화처리
//userDefaults에 불러오기
let plist = UserDefaults.standard
//지정된 값을 꺼내어 각 컨트롤에 설정한다.
self.userName.text = plist.string(forKey: "name")
//삭제
UserDefaults.standard.removeObject(forKey: "key")
https://qussk.github.io/2021/02/27/swift-UserDefault 참고
https://developer.apple.com/documentation/foundation/userdefaults 애플
UserDefaults는 앱 삭제 전까지는 데이터가 유지된다. 앱을 종료했다 다시켜도 데이터가 남아있음
데이터 저장 | ||
프로퍼티 리스트 | 관계형 /목록형 데이터 | 비정형 객체 데이터 |
NSUserDefault | Core Data | Archiving |
Custom Property List | SQLite |
값 여러개 저장하기
var tasks = [Task](){
didSet{ // 프로퍼티 옵저버, tasks배열에 추가될때마다 userDefault에 저장됨
self.saveTask()
}
}
저장할때 tasks라는 키로 map을 사용해서 title, detail, done값을 저장
// 저장하기
@objc func saveTask() {
// 저장하기
let data = self.tasks.map {
[
"title": $0.title,
"detail": $0.detail,
"done": $0.done
]
}
let userDefaults = UserDefaults.standard
userDefaults.set(data, forKey: "tasks")
userDefaults.synchronize()
}
let task = Task(title: title, detail: detail,done: false)
self?.tasks.append(task)
저장값 가져오기 할때 다시 불러와서 하나하나 꺼내준다.
값을 append로 맨뒤에 추가하는 식으로 하니 리스트 하단에 추가가되어서, 역순정렬이 필요했다.
역순정렬은 sorted { $0.title > $1.title } 를 해주면된다. 역순정렬 or 넣을때 맨앞에 넣기
오름차순으로 정렬하려면 이부분을 안쓰면됨
//저장값 가져오기
func loadTasks(){
let userDefaults = UserDefaults.standard
guard let data = userDefaults.object(forKey: "tasks") as? [[String: Any]] else { return }
self.tasks = data.compactMap{
guard let title = $0["title"] as? String else { return nil }
guard let detail = $0["detail"] as? String else { return nil }
guard let done = $0["done"] as? Bool else { return nil }
// return Task(title: title,detail: detail, done: done)
return Task(title: title,detail: detail, done: done)
}.sorted { $0.title > $1.title } // 역순정렬
tableView.reloadData()
print("loadTasks" ,tasks)
}
data.compactMap 공부하기
반응형
'iOS > 문제해결' 카테고리의 다른 글
Framework not found 모듈없다고 뜰때 (0) | 2023.03.10 |
---|---|
Could not find a storyboard named 'Main' in bundle 오류 (0) | 2022.09.09 |
DispatchQueue.main.asyncAfter 시간차두기 (0) | 2022.08.11 |
ITMS-90683: Missing Purpose String in Info.plist 에러 (0) | 2022.06.18 |
앱스토어 배포 참고링크 (0) | 2022.06.18 |
Comments