iOS/데이터베이스 조작

CoreData를 사용해서 데이터 저장하기(Create)

소재훈 2022. 1. 30. 18:25

Core Data 세팅에서 만든 Item 엔티티를 통해서 새로운 데이터를 저장하는 방법을 알아보자.

newItem이라는 이름으로 새로운 Item 객체를 만들어보자. 엔티티 속성에서 Class Definition을 선택하였기 때문에 클래스 처럼 사용할 수 있다.

Item을 살펴보면 context 레이블에 우리의 데이터가 임시로 저장될 context를 지정해주어야 한다. AppDelegate에 정의되어 있는 persistentContainer를 통해서 어떻게 context를 지정할 수 있을까?

 

let context = AppDelegate.persistentContainer.viewContext // error

위와 같은 방법으로는 context를 정의할 수 없다. AppDelegate는 AppDelegate의 객체가 아니라 클래스 이름이기 때문이다. 여기서 편리한 싱글톤 구조가 사용된다. AppDelegate를 호출하는 대신에, UIApplication.shared를 호출한다. 싱글톤 앱 인스턴스이기 때문에 우리의 앱이 유저의 아이폰에서 실행되고 있을 때, 공유되는 UIApplication이 우리의 Application객체와 일치하게 된다.

그리고 공유된 UIApplication 내부에는 delegate라는 것이 존재한다. 이 delegate는 우리가 실행하고 있는 Application의 객체를 나타낸다. 더 자세히 말하면, AppDelegate의 객체를 의미한다.

따라서 context를 불러오기 위해서 다음과 같이 작성할 수 있다.

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

UIApplication과 AppDelegate 클래스 둘다 UIApplicationDelegate를 상속받은 클래스 이기 때문에 as!를 통해서 형변환이 가능하다.

 

새로운 데이터를 저장해야 한다면 만들어낸 context를 사용한다.

에러가 발생할 수 있기 때문에 do - catch문과 try를 사용해야 한다.

do {
    try context.save()
} catch {
    print("Error saving context, \(error)")
}