-
Notifications
You must be signed in to change notification settings - Fork 0
CoreData
WooSeok Suh edited this page Jul 28, 2021
·
1 revision
by Seok
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)
}
}
}
}created by 우송