Skip to content

Core Data Manager

김태훈 edited this page Nov 8, 2021 · 3 revisions

내용

enum ResultType<Success, Failure: Error> {
        case success(Success)
        case failure(Failure)
    }

Core Data Result Type 입니다. 저장하거나 불러오는 결과를 Result Type을 이용하게 됩니다.
associated type으로 ResultType이 정의되어있습니다.

func save(value: [String: Any], type name: String, completion handler: @escaping (ResultType<Void, Error>) -> Void ) {
        self.entityName = name
        guard let entity = entity else { return }
        backgroundContext.perform { [weak self] in
            guard let self = self else {
                return
            }
            let entityObject = NSManagedObject(entity: entity, insertInto: self.container.viewContext)
            value.forEach {
                entityObject.setValue($0.value, forKey: $0.key)
            }
            let context = self.container.viewContext

            do {
                try context.save()
                handler(.success(()))
            } catch let error {
                handler(.failure(error))
            }
        }
    }

Core Data에 data를 저장하는 method입니다.
각각

  • value: 실제 저장할 값 정의된 entity 형식에 맞추어 사전 형식으로 값이 들어오게 됨
  • name: Booster container에 저장된 entity를 불러오기 위한 name
  • handler: Result Type의 @escaping 클로저 정상적일 때는 success 오류가 있을 때는 failure입니다

    func fetch<DataType: NSManagedObject>(type name: String, completion handler: @escaping (ResultType<[DataType], Error>) -> Void) {
        self.entityName = name
        backgroundContext.perform { [weak self] in
            guard let self = self else {
                return
            }

            do {
                let context = try self.container.viewContext.fetch(DataType.fetchRequest())
                guard let context = context as? [DataType] else { return }

                handler(.success(context))
            } catch let error {
                handler(.failure(error))
            }
        }
    }

Core Data에서 해당 entity의 데이터들을 전부 가져와서 handler로 처리하는 매서드 입니다. success일 때 generic type이라 Core Data에 저장된 어떤 형식이든 data를 불러오는 것이 가능합니다.

공통 사항

공통적으로 save, fetch 매서드는 비동기적으로 동작하게 만들었습니다.

Booster🚀🔥

Info

Rule

Backlog

공통 모듈

구현 설명 및 기능 정리

Architecture

Architecture

회의록 & DailyScrum & 회고록

멘토링 피드백

멘토링 피드백
Clone this wiki locally