Project 04 - Core Data

DaY·2021년 3월 25일
1

iOS

목록 보기
15/52
post-thumbnail

모델 파일(프로젝트 명.xcdatamodeld)에서 데이터를 저장하는 방식을 설정한다.

하단에 Add Entity로 Entity를 추가해 이름을 지정해주며, Add Attribute로 데이터 이름 및 형식을 정해준다.

AppDelegate.swift를 보면 Core Data stackCore 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라고한다.) 작업을 수행하는 메소드와 데이터 추가, 삭제 메소드를 생성한다.

Fetch 메소드

func fetchMemo() {
    let request: NSFetchRequest<ToDoList> = ToDoList.fetchRequest()
        
    do {
        todoList = try mainContext.fetch(request)
    } catch {
            print(error)
    }
}

Save 메소드

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를 말한다.

Delete 메소드

func deleteTodo(_ todo: ToDoList?) {
    if let todo = todo {
        mainContext.delete(todo)
        saveContext()
    }
}

0개의 댓글