iOS/데이터베이스 조작

Core Data: Read, Update, Delete

소재훈 2022. 1. 31. 16:22

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를 제외한 나머지는 전부 데이터를 저장하는 과정을 거쳐야 한다는 것 또한 기억하자.