CoreData CRUD

ulls12·2024년 2월 5일
1

Swift TIL

목록 보기
37/60

CoreData

  • 영구 저장소를 사용하여 데이터를 저장할 수 있게 도와주는 애플에서 제공하는 프레임워크
  • 영구 객체 저장소 타입이 정의되어있고, 선택할 수 있다.
    • 인메모리 저장소 (메모리 기반 저장소, 영구적으로 저장되지 않는다)
    • 플랫 바이너리 저장소
    • XML 저장소
    • SQLite 데이터베이스

동작 플로우

  1. 영구저장소에서 데이터 읽어온다
  2. 메모리에 객체(Entity) 로딩
  3. 컨텍스트를 사용하여 CRUD
  4. 영구 저장소에 반영 (commit, save 메서드 호출)

Entity

  • 데이터가 저장될 구조 (모델)
  • .xcdatamotel 파일을 열면 등장하는 데이터 모델 에디더를 통해 정의가 가능하다
  • 구성
    • atribute ( table colomn )
    • relation ( join )
    • fetch 속성
  • 코드에서 사용할 타입
    • NSEntityDescription: 새로운 엔티티의 인스턴스를 컨텍스트에서 생성할ㄷ 때 사용한다
      NSEntityDescription.insertNewObject(forEntityName: "A", into: context)
    • NSManagedObject
  • 상속을 통해 동일 기능 일반화 가능
    • 상속 용도로 만든 베이스 클래스는 추상 엔티티로 설정할 수도 있다 ( 인스턴스 생성 방지 기능 )

데이터 모델 클래스

  • 엔티티가 정의되면 코어 데이터는 자동으로 데이터 모델 클래스를 생성한다
  • 이 모델 클래스를 사용하여 하나의 데이터 단위 (레코드) 를 담는다
  1. 구축
  • NSPersistentContainer`
let container = {
	let container = NSPersistentContainer(name: "/* xcdatamotel파일명 */")
    container.loadPersistentStores { _, error in
    	if let error = error {
    		//에러 경고
    	}
    }
    return container
}()
  • NSManagedObjectContext
    • 코어 데이터에서 데이터를 읽고 쓰기 위해 필요하다
    • persistentStore의 viewContext 속성을 사용해야한다.
  1. fetch (READ)
    NSFetchRequest
  • 레코드를 읽어오는 과정
  • 데이터 가져오기
let context = container.viewContext
let fetchRequest = /* xcdatamotel파일명 */.fetchRequest()
let result = try? context.fetch(fetchRequest)
return result ?? []
  1. create
  • NSEntityDescription
let entity = NSEntityDescription.entity(forEntityName: "/*name*/" in: context)
let object = NSManagedObject(entity: entity, insertInfo: context)

or

//객체 생성
let object = NSEntityDescription.insertNewObject(forENtityNAme: "/*name*/" into:context)
object.setValue(UUID(), forkey: "id")
object.setValue(title, forkey: "title")
object.setValue(false, forkey: "isCompleted")
try {
	context.save()
}
profile
I am 개발해요

0개의 댓글