Core Data: Read, Update, Delete
Read
func loadItems() {
let request: NSFetchRequest<Item> = Item.fetchRequest()
do {
itemArray = try context.fetch(request)
} catch {
print("Error fetching data from context \(error)")
}
}
viewDidLoad() 메서드에 위와 같은 함수를 호출하여, 앱 실행시 데이터를 불러오도록 하였다. itemArray 라는 배열에 데이터를 불러오면 화면에 출력해주는 방식이다. Item은 우리가 만든 엔티티의 이름이다.
request를 받을 때는 NSFetchRequest<Item>으로 타입을 꼭 특정해주어야 한다.
그리고 context.fetch(_:)메서드를 통해서 데이터베이스에 있는 데이터를 불러올 수 있다. context는 다음과 같다.
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
AppDelegate에 정의된 persistentContainer의 viewContext를 불러온 것이다.
에러가 발생할 수 있기 때문에 try와 do-catch 문으로 감싸주면 데이터를 불러올 수 있다.
데이터가 추가/삭제 되는 것을 실시간으로 읽어오는 예시를 살펴보자
Update
업데이트는 단순하다.
itemArray[indexPath.row].setValue("Completed", forKey: "title")
위와 같이 setValue메서드를 통해서 데이터를 새로히 저장해주면 된다. 그리고 context.save()를 통해서 데이터를 저장해주면 된다.
Delete
데이터를 삭제하는 방법은
1. 먼저 context에서 데이터를 삭제 한 후
2. 데이터가 삭제될 때 처리해야할 로직을 처리해주고
3. context.save()를 수행해주면 된다.
context.delete(itemArray[indexPath.row])
itemArray.remove(at: indexPath.row)
서순이 중요하다. 위의 코드에서도 itemArray.remove()를 먼저 수행하게 되면, 만약 마지막 데이터를 지웠을 때, context에서 지워야 하는 데이터를 찾을 수 없기 때문에 반드시, context의 데이터를 먼저 삭제해주어야 한다.
CRUD중 Read를 제외한 나머지는 전부 데이터를 저장하는 과정을 거쳐야 한다는 것 또한 기억하자.