Core Data

ulls12·2024년 1월 8일
0

Swift TIL

목록 보기
29/60
  • iOS 앱에서 데이터를 관리하고 영구적으로 저장하는데 사용되는 프레임워크
  • 데이터 모델을 정의하고 이를 기반으로 데이터를 읽고 쓸 수 있다

Core Data Stack 설정

AppDelegate.swift 파일에서 Core Data 스택을 설정할 수 있다

import CoreData
lazy var persistentContainer: NSPersistentContainer = {
	let container = NSPersistentContainer(name: //생성한 데이터 모델 명)
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
    	if let error = error as NSError? {
    		fatalError("Unresolved Error \(error), \(error.userInfo)")
 		}
	}
	return container
}()
func saveContext() {
	let context = persistentContainer.viewContext
    if context.hasChanges {
    	do {
        	try context.save()
        } catch {
        	let nserror = error as NSerror
            fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}

코드에서 Data 사용하기

appDelegate에 정의한 persistentContainer에 다음과 같이 접근할 수 있다

import CoreData

var persistentContainer: NSPersistentContainer? {
	(UIApplication.shared.delegate as? AppDelegate)?.persistentContainer
}

데이터 쓰기 (Create)

  • 데이터 작성하는 방법
guard let context = self.persistentContainer?.viewContext else { return }

let nerCar = Car(context: context)

newCar.id = UUID()
nerCar.name = "benz"

try? context.save()

데이터 읽기 (Read)

  • 데이터 조회하는 방법
guard let context = self.persistentContainer?.viewContext else { return }

let request = Car.fetchRequest()
let cars = try? context.fetch(request)

print(cars)

데이터 수정 (Update)

guard let context = self.persistentContainer?.viewContext else { return }

let request = Car.fetchRequest()
guard let cars = try? context.fetch(request) else { return }
let filteredCars = cars.filter({ $0.name == "benz" })
for car in filteredCars {
	car.name = "tesla"
}

try? context.save()

데이터 삭제 (Delete)

guard let context = self.persistentContainer?.viewContext else { return }

let request = Car.fetchRequest()

guard let cars = try? context.fetch(request) else { return }

let filteredCars = cars.filter({ $0.name == "tesla" })

for car in filteredCars {
	context.delete(car)
}

try? context.save()
profile
I am 개발해요

0개의 댓글