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)")
}
'iOS > 데이터베이스 조작' 카테고리의 다른 글
CoreData를 이용해서 카테고리 계획 앱 만들기 (0) | 2022.02.04 |
---|---|
Core Data: Read, Update, Delete (0) | 2022.01.31 |
Core Data 세팅, 동작 구조 (0) | 2022.01.29 |
Persistent Data Storage (0) | 2022.01.29 |
Userdefaults로 데이터 Persistency 유지하기 (0) | 2022.01.27 |