Setting Up a Core Data Stack Manually, Core Data 저장소 설정

Groot·2022년 8월 24일
0

TIL

목록 보기
57/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 Setting Up a Core Data Stack Manually - 공식문서

  • NSPersistentContainer는 iOS 10.0 이상 및 macOS 10.12 이상에서 지원됩니다.
  • 이전 대상에 배포하는 경우 NSManagedObjectModel, NSPersistentStoreCoordinator 및 하나 이상의 NSManagedObjectContext를 수동으로 인스턴스화해야 합니다.

📍 Create a Managed Object Model

  • NSManagedObjectModel을 인스턴스화하려면 .xcdatamodeld 파일의 컴파일된 버전을 가리키는 URL을 전달합니다.
  • .momd 파일은 일반적으로 앱 번들의 일부입니다.
guard let modelURL = Bundle.main.url(forResource: "DataModel",
                                     withExtension: "momd") else {
    fatalError("Failed to find data model")
}
guard let mom = NSManagedObjectModel(contentsOf: modelURL) else {
    fatalError("Failed to create model from file: \(modelURL)")
}

📍 Create a Persistent Store Coordinator

  • 다음으로 로드된 managedObjectModel을 NSPersistentStoreCoordinator 이니셜라이저에 전달하여 managedObjectModel과 연결된 store coordinator를 생성합니다.
let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)

📍 Add a Persistent Store

  • Core Data가 데이터 모델을 디스크에 유지하기를 원하면 Store Coordinator에게 파일이 저장 될 위치와 사용할 형식을 알려주십시오.
let dirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last
let fileURL = URL(string: "DataModel.sql", relativeTo: dirURL)
do {
    try psc.addPersistentStore(ofType: NSSQLiteStoreType,
                               configurationName: nil,
                               at: fileURL, options: nil)
} catch {
    fatalError("Error configuring persistent store: \(error)")
}

📍 Create a Managed Object Context

  • NSManagedObjectContext를 만들고 persistentStoreCoordinator을 설정합니다.
let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
moc.persistentStoreCoordinator = psc

📍 함수화

lazy var context: NSManagedObjectContext = configurationPersistentStoreCoordinator()

    
    func configurationPersistentStoreCoordinator() -> NSManagedObjectContext {
        guard let modelURL = Bundle.main.url(forResource: "JokeDataModel",
                                             withExtension: "momd") else {
            fatalError("Failed to find data model")
        }
        
        guard let mom = NSManagedObjectModel(contentsOf: modelURL) else {
            fatalError("Failed to create model from file: \(modelURL)")
        }
        
        let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)
        let dirURL = FileManager.default.urls(for: .cachesDirectory,
                                              in: .userDomainMask).last
        let fileURL = URL(string: "Joke.sql", relativeTo: dirURL)
        
        do {
            try psc.addPersistentStore(ofType: NSSQLiteStoreType,
                                       configurationName: nil,
                                       at: fileURL, options: nil)
        } catch {
            fatalError("Error configuring persistent store: \(error)")
        }
        
        let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
        moc.persistentStoreCoordinator = psc
        
        return moc
    }

🔗 저장소 위치 설정

  • for: .cachesDirectory 의 설정으로 저장소 위치를 설정한다.
let dirURL = FileManager.default.urls(for: .cachesDirectory,
                                              in: .userDomainMask).last

profile
I Am Groot

0개의 댓글