[예제] Core Data

J.Noma·2022년 2월 12일
0

iOS : 뽑아쓰는 예제

목록 보기
12/12

Reference

  • Creating a Core Data Model : Apple문서
  • Setting Up a Core Data Stack :

🌀 스키마 정의

🔸 1. Data Model 파일 생성 (.xcdatamodelId)

🔸 2. 엔티티와 Attribute 설정

🔸 3. Codegen 설정 및 NSManagedObject subclass 생성

codegen을 class definition으로 설정 시, 일단 NSManagedObject subclass 생성을 하여 빌드설정이 되게 한 이후에, redeclaration을 막기위해 자동 생성된 class/프로퍼티 파일은 삭제해주어야 한다


🌀 데이터 조회/변경/삭제

🔸 1. persistentContainer 생성 및 context 저장 인터페이스 구현

(굳이 AppDelegate에 만들 필요는 없음)

class AppDelegate {

	...
    
    lazy var persistentContainer: NSPersistentContainer = {        
        let container = NSPersistentContainer(name: "DataModel")
        container.loadPersistentStores { description, error in
            if let error = error {
                fatalError("Unable to load persistent stores: \(error)")
            }
        }
        return container
    }()
    
    func saveContext(backgroundContext: NSManagedObjectContext? = nil) {
        let context = backgroundContext ?? viewContext
        guard context.hasChanges else { return }
        do {
            try context.save()
        } catch let error as NSError {
            print("Error: \(error), \(error.userInfo)")
        }
    }
    
    ...
    
}

🔸 Read

guard let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext else {
	return
}
let persons = try context.fetch(Person.fetchRequest())

🔸 Add

guard let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext else {
	return
}

let person = Person(context: context)
person.name = "jn"
person.age = 20
try? context.save()

🔸 Delete

guard let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext else {
	return
}
context.delete(person)
try? context.save()
profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글