모델 파일(프로젝트 명.xcdatamodeld)에서 데이터를 저장하는 방식을 설정한다.
하단에 Add Entity로 Entity를 추가해 이름을 지정해주며, Add Attribute로 데이터 이름 및 형식을 정해준다.
AppDelegate.swift를 보면 Core Data stack과 Core Data Saving support 부분이 있다.
이 부분을 그냥 사용해도 되지만 편의를 위해 앱 전체에서 하나의 인스턴스를 공유하기 위한 새로운 파일에 잘라넣는다.
core data에서 실행하는 작업은 context 객체가 실행하므로 다음과 같은 코드를 추가한다.
static let shared = DataManager()
private init() {
}
var mainContext: NSManagedObjectContext {
return persistentContainer.viewContext
}
또한 SceneDelegate.swift 파일 하단에
(UIApplication.shared.delegate as? AppDelegate)?.saveContext()
부분을 다음과 같이 바꾼다.
swift 파일 명.shared.saveContext()
saveContext() 객체가 원래대로 AppDelegate.swift 파일에 존재하였다면 수정할 필요가 없지만 지금처럼 새로운 파일에 옮긴다면 위와 같은 작업이 필요하다.
이제 데이터를 읽어오는(iOS에서는 fetch라고한다.) 작업을 수행하는 메소드와 데이터 추가, 삭제 메소드를 생성한다.
func fetchMemo() {
let request: NSFetchRequest<ToDoList> = ToDoList.fetchRequest()
do {
todoList = try mainContext.fetch(request)
} catch {
print(error)
}
}
func addNewTodo(_ title: String?, _ descript: String?, _ date: Double?, _ isComplete: Bool) {
let newTodo = ToDoList(context: mainContext)
newTodo.title = title
newTodo.descript = descript
newTodo.date = date!
newTodo.isComplete = isComplete
todoList.insert(newTodo, at: 0)
saveContext()
}
위의 title, descript, date, isComplete는 모델 파일에서 설정한 Attributes를 말한다.
func deleteTodo(_ todo: ToDoList?) {
if let todo = todo {
mainContext.delete(todo)
saveContext()
}
}