Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

CoreData

WooSeok Suh edited this page Jul 28, 2021 · 1 revision

2021-07-28

by Seok

Step.1

MemoryStorage -> PersistenceStorage로 변경

  • 기존 memoryStorage코드에 coredata 저장코드 추가 구현
  • Service 안정성을 위하여 Firebase외에 coredata 활용
  • 네트워크 연결 안될 시에도 coredata에 저장되며, background진입/앱 종료 시에 firebase에 저장
  • 추후 Error 처리 구현 필요
// MARK: CoreData Method
private extension PersistenceStorage {
        
    private func fetchUnit() -> [ItemInformation] {
        do {
            guard let fetchResult = try context.fetch(ItemInformation.fetchRequest()) as? [ItemInformation] else { return [] }
            return fetchResult
        } catch {
            print(error)
            return []
        }
    }

    private func updateUnit(to unit: Unit) {
        for info in fetchUnit() where info.uuid == unit.uuid {
            info.setValue(unit.uuid, forKey: "uuid")
            info.setValue(unit.image, forKey: "image")
            info.setValue(unit.level, forKey: "level")
        }
        do {
            try context.save()
        } catch {
            print(error)
        }
    }
    
    private func updateMoney(money: Int) {
        do {
            guard let previousInfo = fetchMoneyInfo().first else { return }
            previousInfo.setValue(money, forKey: "myMoney")
            try context.save()
        } catch {
            print(error)
        }
    }
    
    private func updateScore(score: Int) {
        do {
            guard let previousInfo = fetchScoreInfo().first else { return }
            previousInfo.setValue(score, forKey: "myScore")
            try context.save()
        } catch {
            print(error)
        }
    }
    
    private func fetchMoneyInfo() -> [MoneyInformation] {
        do {
            guard let fetchResult = try context.fetch(MoneyInformation.fetchRequest()) as? [MoneyInformation] else {
                return []
            }
            return fetchResult
        } catch {
            print(error)
            return []
        }
    }
    
    private func fetchScoreInfo() -> [ScoreInformation] {
        do {
            guard let fetchResult = try context.fetch(ScoreInformation.fetchRequest()) as? [ScoreInformation] else {
                return []
            }
            return fetchResult
        } catch {
            print(error)
            return []
        }
    }
    
    private func appendUnitInfo(_ unit: Unit) {
        if let entity = NSEntityDescription.entity(forEntityName: "ItemInformation", in: context) {
            let info = NSManagedObject(entity: entity, insertInto: context)
            info.setValue(unit.uuid, forKey: "uuid")
            info.setValue(unit.image, forKey: "image")
            info.setValue(unit.level, forKey: "level")
            
            do {
                try context.save()
            } catch {
                print(error.localizedDescription)
            }
        }
    }
    
    private func appendMoenyInfo(_ money: Int) {
        if let entity = NSEntityDescription.entity(forEntityName: "MoneyInformation", in: context) {
            let info = NSManagedObject(entity: entity, insertInto: context)
            info.setValue(money, forKey: "myMoney")
            
            do {
                try context.save()
            } catch {
                print(error)
            }
        }
        moneyStore = money
        moneyStatus.onNext(moneyStore)
    }
    
    private func appendScoreInfo(_ score: Int) {
        if let entity = NSEntityDescription.entity(forEntityName: "ScoreInformation", in: context) {
            let info = NSManagedObject(entity: entity, insertInto: context)
            info.setValue(score, forKey: "myScore")
            
            do {
                try context.save()
            } catch {
                print(error)
            }
        }
    }
}

Clone this wiki locally

Morty Proxy This is a proxified and sanitized view of the page, visit original site.