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)")
}
}
}
appDelegate에 정의한 persistentContainer에 다음과 같이 접근할 수 있다
import CoreData
var persistentContainer: NSPersistentContainer? {
(UIApplication.shared.delegate as? AppDelegate)?.persistentContainer
}
guard let context = self.persistentContainer?.viewContext else { return }
let nerCar = Car(context: context)
newCar.id = UUID()
nerCar.name = "benz"
try? context.save()
guard let context = self.persistentContainer?.viewContext else { return }
let request = Car.fetchRequest()
let cars = try? context.fetch(request)
print(cars)
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()
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()