프로젝트 만들어보기

[iOS] TodoList 만들기 2/3 (UserDefaults/didSelectRowAt)

데브킹덕 2022. 10. 11. 16:04

TextField를 이용해 할일들을 테이블뷰에 전달하도록 하였는데 앱을 껐다가 키면 넘겨준 정보들이 모두 날라가게 됨

 

그래서 UserDefaults라는 로컬 저장을 사용함

 

UserDefaults

- 런타임환경이 동작하면서 앱이 실행되는 동안 기본저장소에 접근해 데이터를(키-값으로 ) 기록하고 가져오는 역할을 하는 인터페이스 

- 싱글톤패턴으로 앱전체 하나의 인스턴스만 존재하게 됨

- 여러가지 데이터타입을 저장할 수 있음(Float,Int,Double,,Bool,URL,NSData,NSString,NSNumber 등)

 

 

UserDefaults에 할일 저장하는 메서드 만들기

- tasks 배열을 매핑하여 딕셔너리 형태로 바꿔줌 

- UserDefaults.standard로 UserDefaults에 접근하도록함

- .set 메서드를 사용해 데이터를 저장함

 

 

UserDefaults의 할일들을 불러오는 메서드

.object 메서드로 저장된 데이터를 로드할수 있음,

object 메서드는 Any타입으로 리턴이 되기 때문에  딕셔너리타입으로 배열을 저장했으므로 타입캐스팅함 as? [[String:Any]]

tasks 배열에 저장하기 위해 data.compactMap으로 매핑을해줌 

- nil이 시퀀스의 각 요소로 지정된 변환을 호출한 결과가 아닌 배열을 반환합니다 .

- 딕셔너리의 value를 가져옴

- Task 타입이 되게 인스턴스화를 해줌

 

 

- tasks프로퍼티에 프로퍼티 옵져버를 만들것임

- tasks 배열에 할일이 추가될때 마다 UserDefaults에 할일이 추가됨 

 

viewDidLoad에 loadTasks를 호출해서 저장된 할일들을 불러오도록함

 

 

didSelectRowAt

- 셀을 선택하였을때 어떤 셀이 선택되었는지  알려주는 메서드

- ndexPath.row를 이용하여 tasks배열의 요소에 접근함

 

 

reloadRows

 

- 원래 배열 요소에 덮어씌우고 reloadRows메서드를 이용해 선택된 셀만 리로드하도록함

- at파라미터에는 섹션과 행의 위치가 적혀있는 indexPath 구조체의 배열을 넘겨줌 - 여러개의 행을 업데이트 가능 

- with 파라미터에는 Rowanimation을 열거형 타입을 받고 애니메이션 선택가능 

 

 

- cellForRowAt메서드에서 task.done이 true면 체크마크를 표시하도록 함