OSDN Git Service

CoreDataのエンティティ名を文字列でアクセスしないようにした
authormasakih <masakih@users.sourceforge.jp>
Wed, 8 Mar 2017 15:41:44 +0000 (00:41 +0900)
committermasakih <masakih@users.sourceforge.jp>
Wed, 8 Mar 2017 15:41:44 +0000 (00:41 +0900)
32 files changed:
KCD/AirBaseMapper.swift
KCD/BasicMapper.swift
KCD/BookmarkDataStore.swift
KCD/BookmarkManager.swift
KCD/CoreDataCore.swift
KCD/DeckMapper.swift
KCD/Fleet.swift
KCD/HistoryWindowController.swift
KCD/JSONMapper.swift
KCD/KenzoDockMapper.swift
KCD/KenzoDockStatus.swift
KCD/LocalDataStore.swift
KCD/MapStartCommand.swift
KCD/MasterFurnitureMapper.swift
KCD/MasterMapAreaMapper.swift
KCD/MasterMapInfoMapper.swift
KCD/MasterMissionMapper.swift
KCD/MasterSTypeMapper.swift
KCD/MasterShipMapper.swift
KCD/MasterSlotItemEquipTypeMapper.swift
KCD/MasterSlotItemMapper.swift
KCD/MasterUseItemMapper.swift
KCD/MaterialMapper.swift
KCD/MissionStatus.swift
KCD/NyukyoDockMapper.swift
KCD/NyukyoDockStatus.swift
KCD/ResourceHistoryDataStore.swift
KCD/ServerDataStore.swift
KCD/ShipMapper.swift
KCD/SlotItemMapper.swift
KCD/TSVSupport.swift
KCD/TemporaryDataStore.swift

index 92596a0..4c11c83 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class AirBaseMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "AirBase",
+    let configuration = MappingConfiguration(entity: .airBase,
                                              dataKey: "api_data.api_air_base",
                                              compositPrimaryKeys: ["area_id", "rid"],
                                              editorStore: ServerDataStore.oneTimeEditor())
index 84f9130..d148c6d 100644 (file)
@@ -28,7 +28,7 @@ class BasicMapper: JSONMapper {
     
     required init(_ apiResponse: APIResponse) {
         self.apiResponse = apiResponse
-        self.configuration = MappingConfiguration(entityName: "Basic",
+        self.configuration = MappingConfiguration(entity: .basic,
                                                   dataKey: dataKey(apiResponse),
                                                   editorStore: ServerDataStore.oneTimeEditor())
     }
index 82b1686..30cea3e 100644 (file)
@@ -21,6 +21,9 @@ extension CoreDataIntormation {
 extension CoreDataCore {
     static let bookmark = CoreDataCore(.bookmark)
 }
+extension Entity {
+    static let bookmark = Entity(name: "Bookmark")
+}
 
 class BookmarkDataStore: CoreDataAccessor, CoreDataManager {
     static var `default` = BookmarkDataStore(type: .reader)
@@ -43,6 +46,6 @@ class BookmarkDataStore: CoreDataAccessor, CoreDataManager {
 
 extension BookmarkDataStore {
     func createBookmark() -> BookmarkItem? {
-        return insertNewObject(forEntityName: "Bookmark") as? BookmarkItem
+        return insertNewObject(for: .bookmark) as? BookmarkItem
     }
 }
index 41bfddc..a97f694 100644 (file)
@@ -26,7 +26,7 @@ class BookmarkManager: NSObject, NSMenuDelegate {
         bookmarksController = NSArrayController()
         super.init()
         bookmarksController.managedObjectContext = self.manageObjectContext
-        bookmarksController.entityName = "Bookmark"
+        bookmarksController.entityName = Entity.bookmark.name
         let sort = NSSortDescriptor(key: "order", ascending: true)
         bookmarksController.sortDescriptors = [sort]
         let mainMenu = NSApplication.shared().mainMenu
@@ -52,7 +52,7 @@ class BookmarkManager: NSObject, NSMenuDelegate {
                 print("BookmarkManager: Can no convert max order to Int")
                 return nil
         }
-        guard let new = editorStore.insertNewObject(forEntityName: "Bookmark") as? BookmarkItem
+        guard let new = editorStore.createBookmark()
             else {
                 print("BookmarkManager: Can not insert BookMarkItem")
                 return nil
index 067ca5d..6de30d0 100644 (file)
@@ -49,6 +49,10 @@ struct CoreDataCore {
     }
 }
 
+struct Entity {
+    let name: String
+}
+
 protocol CoreDataProvider {
     init(type: CoreDataManagerType)
     var core: CoreDataCore { get }
@@ -66,10 +70,10 @@ protocol CoreDataManager {
 }
 
 protocol CoreDataAccessor: CoreDataProvider {
-    func insertNewObject(forEntityName name: String) -> NSManagedObject
+    func insertNewObject(for entity: Entity) -> NSManagedObject
     func delete(_ object: NSManagedObject)
     func object(with objectId: NSManagedObjectID) -> NSManagedObject
-    func objects(withEntityName entityName: String, sortDescriptors: [NSSortDescriptor]?, predicate: NSPredicate?) throws -> [NSManagedObject]
+    func objects(with entity: Entity, sortDescriptors: [NSSortDescriptor]?, predicate: NSPredicate?) throws -> [NSManagedObject]
 }
 
 private class CoreDataRemover {
@@ -210,8 +214,8 @@ extension CoreDataProvider {
 }
 
 extension CoreDataAccessor {
-    func insertNewObject(forEntityName name: String) -> NSManagedObject {
-        return NSEntityDescription.insertNewObject(forEntityName: name, into: managedObjectContext)
+    func insertNewObject(for entity: Entity) -> NSManagedObject {
+        return NSEntityDescription.insertNewObject(forEntityName: entity.name, into: managedObjectContext)
     }
     func delete(_ object: NSManagedObject) {
         managedObjectContext.delete(object)
@@ -219,8 +223,8 @@ extension CoreDataAccessor {
     func object(with objectId: NSManagedObjectID) -> NSManagedObject {
         return managedObjectContext.object(with: objectId)
     }
-    func objects(withEntityName entityName: String, sortDescriptors: [NSSortDescriptor]? = nil, predicate: NSPredicate? = nil) throws -> [NSManagedObject] {
-        let req = NSFetchRequest<NSManagedObject>(entityName: entityName)
+    func objects(with entity: Entity, sortDescriptors: [NSSortDescriptor]? = nil, predicate: NSPredicate? = nil) throws -> [NSManagedObject] {
+        let req = NSFetchRequest<NSManagedObject>(entityName: entity.name)
         req.sortDescriptors = sortDescriptors
         req.predicate = predicate
         return try managedObjectContext.fetch(req)
index f1d17ca..8ab03aa 100644 (file)
@@ -38,7 +38,7 @@ class DeckMapper: JSONMapper {
     
     required init(_ apiResponse: APIResponse) {
         self.apiResponse = apiResponse
-        self.configuration = MappingConfiguration(entityName: "Deck",
+        self.configuration = MappingConfiguration(entity: .deck,
                                                   dataKey: dataKey(apiResponse),
                                                   editorStore: ServerDataStore.oneTimeEditor())
     }
index 7da8be6..e0febf1 100644 (file)
@@ -27,11 +27,11 @@ class Fleet: NSObject {
         deckController = NSObjectController()
         super.init()
         
-        deckController.entityName = "Deck"
+        deckController.entityName = Entity.deck.name
         deckController.managedObjectContext = ServerDataStore.default.managedObjectContext
         deckController.fetchPredicate = NSPredicate(format: "id = %ld", number)
         let req = NSFetchRequest<NSFetchRequestResult>()
-        req.entity = NSEntityDescription.entity(forEntityName: "Deck", in: deckController.managedObjectContext!)
+        req.entity = NSEntityDescription.entity(forEntityName: Entity.deck.name, in: deckController.managedObjectContext!)
         req.predicate = deckController.fetchPredicate
         do {
             try deckController.fetch(with: req, merge: false)
index f179765..1b111fb 100644 (file)
@@ -45,7 +45,7 @@ class HistoryWindowController: NSWindowController {
         let controller: NSArrayController
         let predicateFormat: String
         let tableView: NSTableView
-        let entityName: String
+        let entityName: Entity
         let pickUpPredicateFormat: String
         
         init(_ owner: HistoryWindowController) {
@@ -54,19 +54,19 @@ class HistoryWindowController: NSWindowController {
                 controller = owner.kaihatuHistoryController
                 predicateFormat = "name contains $value"
                 tableView = owner.kaihatuHistoryTableView
-                entityName = "KaihatuHistory"
+                entityName = .kaihatuHistory
                 pickUpPredicateFormat = "date = %@ AND name = %@"
             case .kenzoHistory:
                 controller = owner.kenzoHistoryController
                 predicateFormat = "name contains $value"
                 tableView = owner.kenzoHistoryTableView
-                entityName = "KenzoHistory"
+                entityName = .kenzoHistory
                 pickUpPredicateFormat = "date = %@ AND name = %@"
             case .dropHistory:
                 controller = owner.dropHistoryController
                 predicateFormat = "shipName contains $value"
                 tableView = owner.dropHistoryTableView
-                entityName = "DropShipHistory"
+                entityName = .dropShipHistory
                 pickUpPredicateFormat = "date = %@ AND mapCell = %ld"
             }
         }
@@ -144,7 +144,7 @@ class HistoryWindowController: NSWindowController {
         guard let predicate = p else { return }
         
         let store = LocalDataStore.oneTimeEditor()
-        if let a = try? store.objects(withEntityName: info.entityName,
+        if let a = try? store.objects(with: info.entityName,
                              predicate: predicate),
             let item = a.first,
             var history = item as? Markable {
index 09fe9c7..633e4f6 100644 (file)
@@ -9,20 +9,20 @@
 import Cocoa
 
 struct MappingConfiguration {
-    let entityName: String
+    let entity: Entity
     let dataKey: String
     let primaryKey: String
     let compositPrimaryKeys: [String]?
     let editorStore: CoreDataAccessor
     let ignoreKeys: [String]
     
-    init(entityName: String,
+    init(entity: Entity,
          dataKey: String = "api_data",
          primaryKey: String = "id",
          compositPrimaryKeys: [String]? = nil,
          editorStore: CoreDataAccessor,
          ignoreKeys: [String] = []) {
-        self.entityName = entityName
+        self.entity = entity
         self.dataKey = dataKey
         self.primaryKey = primaryKey
         self.compositPrimaryKeys = compositPrimaryKeys
@@ -118,13 +118,13 @@ extension JSONMapper {
             else { return print("JSON is wrong.") }
         
         let store = configuration.editorStore
-        guard let objects = try? store.objects(withEntityName: configuration.entityName, sortDescriptors: sortDescriptors)
-            else { return print("Can not get entity named \(configuration.entityName)") }
+        guard let objects = try? store.objects(with: configuration.entity, sortDescriptors: sortDescriptors)
+            else { return print("Can not get entity named \(configuration.entity)") }
         data.forEach {
             if let object = objectSearch(objects, $0) {
                 registerElement($0, to: object)
             } else {
-                registerElement($0, to: store.insertNewObject(forEntityName: configuration.entityName))
+                registerElement($0, to: store.insertNewObject(for: configuration.entity))
             }
         }
         finishOperating()
index 6f5e8d2..ca17777 100644 (file)
@@ -30,7 +30,7 @@ class KenzoDockMapper: JSONMapper {
     
     required init(_ apiResponse: APIResponse) {
         self.apiResponse = apiResponse
-        self.configuration = MappingConfiguration(entityName: "KenzoDock",
+        self.configuration = MappingConfiguration(entity: .kenzoDock,
                                                   dataKey: dataKey(apiResponse),
                                                   editorStore: ServerDataStore.oneTimeEditor())
     }
index 4264a8d..975fc15 100644 (file)
@@ -44,7 +44,7 @@ class KenzoDockStatus: NSObject {
         controller = NSArrayController()
         super.init()
         controller.managedObjectContext = ServerDataStore.default.managedObjectContext
-        controller.entityName = "KenzoDock"
+        controller.entityName = Entity.kenzoDock.name
         controller.fetchPredicate = NSPredicate(format: "id = %ld", number)
         controller.automaticallyRearrangesObjects = true
         controller.fetch(nil)
index a097360..adf1c7b 100644 (file)
@@ -21,6 +21,13 @@ extension CoreDataIntormation {
 extension CoreDataCore {
     static let local = CoreDataCore(.local)
 }
+extension Entity {
+    static let dropShipHistory = Entity(name: "DropShipHistory")
+    static let kaihatuHistory = Entity(name: "KaihatuHistory")
+    static let kenzoMark = Entity(name: "KenzoMark")
+    static let kenzoHistory = Entity(name: "KenzoHistory")
+    static let hiddenDropShipHistory = Entity(name: "HiddenDropShipHistory")
+}
 
 class LocalDataStore: CoreDataAccessor, CoreDataManager {
     static var `default` = LocalDataStore(type: .reader)
@@ -48,18 +55,18 @@ extension LocalDataStore {
         let predicate02 = NSPredicate(format: "mark = 0 || mark = nil")
         let predicate03 = NSPredicate(format: "mapArea IN %@", ["1", "2", "3", "4", "5", "6", "7", "8", "9"])
         let predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate01, predicate02, predicate03])
-        guard let k = try? objects(withEntityName: "DropShipHistory", predicate: predicate),
+        guard let k = try? objects(with: .dropShipHistory, predicate: predicate),
             let dropHistories = k as? [DropShipHistory]
             else { return [] }
         return dropHistories
     }
     
     func createDropShipHistory() -> DropShipHistory? {
-        return insertNewObject(forEntityName: "DropShipHistory") as? DropShipHistory
+        return insertNewObject(for: .dropShipHistory) as? DropShipHistory
     }
     
     func kaihatuHistories() -> [KaihatuHistory] {
-        guard let k = try? objects(withEntityName: "KaihatuHistory"),
+        guard let k = try? objects(with: .kaihatuHistory),
             let kaihatuHistories = k as? [KaihatuHistory]
             else { return [] }
         return kaihatuHistories
@@ -69,18 +76,18 @@ extension LocalDataStore {
         let predicate01 = NSPredicate(format: "date < %@", date as NSDate)
         let predicate02 = NSPredicate(format: "mark = 0 || mark = nil")
         let predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate01, predicate02])
-        guard let k = try? objects(withEntityName: "KaihatuHistory", predicate: predicate),
+        guard let k = try? objects(with: .kaihatuHistory, predicate: predicate),
             let kaihatuHistories = k as? [KaihatuHistory]
             else { return [] }
         return kaihatuHistories
     }
     func createKaihatuHistory() -> KaihatuHistory? {
-        return insertNewObject(forEntityName: "KaihatuHistory") as? KaihatuHistory
+        return insertNewObject(for: .kaihatuHistory) as? KaihatuHistory
     }
     
     func kenzoMark(byDockId dockId: Int) -> KenzoMark? {
         let predicate = NSPredicate(format: "kDockId = %ld", dockId)
-        guard let km = try? objects(withEntityName: "KenzoMark", predicate: predicate),
+        guard let km = try? objects(with: .kenzoMark, predicate: predicate),
             let kenzoMarks = km as? [KenzoMark],
             let kenzoMark = kenzoMarks.first
             else { return nil }
@@ -89,14 +96,14 @@ extension LocalDataStore {
     func kenzoMark(fuel: Int, bull: Int, steel: Int, bauxite: Int, kaihatusizai: Int, kDockId: Int, shipId: Int) -> KenzoMark? {
         let predicate = NSPredicate(format: "fuel = %ld AND bull = %ld AND steel = %ld AND bauxite = %ld AND kaihatusizai = %ld AND kDockId = %ld AND created_ship_id = %ld"
             , fuel, bull, steel, bauxite, kaihatusizai, kDockId, shipId)
-        guard let km = try? objects(withEntityName: "KenzoMark", predicate: predicate),
+        guard let km = try? objects(with: .kenzoMark, predicate: predicate),
             let kenzoMarks = km as? [KenzoMark],
             let kenzoMark = kenzoMarks.first
             else { return nil }
         return kenzoMark
     }
     func createKenzoMark() -> KenzoMark? {
-        return insertNewObject(forEntityName: "KenzoMark") as? KenzoMark
+        return insertNewObject(for: .kenzoMark) as? KenzoMark
     }
     
     func unmarkedKenzoHistories(befor days: Int) -> [KenzoHistory] {
@@ -104,22 +111,22 @@ extension LocalDataStore {
         let predicate01 = NSPredicate(format: "date < %@", date as NSDate)
         let predicate02 = NSPredicate(format: "mark = 0 || mark = nil")
         let predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate01, predicate02])
-        guard let k = try? objects(withEntityName: "KenzoHistory", predicate: predicate),
+        guard let k = try? objects(with: .kenzoHistory, predicate: predicate),
             let kenzoHistories = k as? [KenzoHistory]
             else { return [] }
         return kenzoHistories
     }
     func createKenzoHistory() -> KenzoHistory? {
-        return insertNewObject(forEntityName: "KenzoHistory") as? KenzoHistory
+        return insertNewObject(for: .kenzoHistory) as? KenzoHistory
     }
     
     func hiddenDropShipHistories() -> [DropShipHistory] {
-        guard let d = try? objects(withEntityName: "HiddenDropShipHistory"),
+        guard let d = try? objects(with: .hiddenDropShipHistory),
             let dropShipHistories = d as? [DropShipHistory]
             else { return [] }
         return dropShipHistories
     }
     func createHiddenDropShipHistory() -> DropShipHistory? {
-        return insertNewObject(forEntityName: "HiddenDropShipHistory") as? DropShipHistory
+        return insertNewObject(for: .hiddenDropShipHistory) as? DropShipHistory
     }
 }
index 22ca5d2..02e9525 100644 (file)
@@ -43,7 +43,7 @@ class MapStartCommand: JSONCommand {
         guard let data = json["api_data"] as? [String: Any],
             let no = data["api_no"] as? Int
             else { return print("startBattle JSON is wrong") }
-        guard let battle = store.insertNewObject(forEntityName: "Battle") as? KCBattle
+        guard let battle = store.createBattle()
             else { return print("Can not create Battle") }
         battle.deckId = deckId
         battle.mapArea = mapArea
index 83190a1..a23a70a 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterFurnitureMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterFurniture",
+    let configuration = MappingConfiguration(entity: .masterFurniture,
                                              dataKey: "api_data.api_mst_furniture",
                                              editorStore: ServerDataStore.oneTimeEditor(),
                                              ignoreKeys: ["api_season"])
index 4cc0b00..2380847 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterMapAreaMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterMapArea",
+    let configuration = MappingConfiguration(entity: .masterMapArea,
                                              dataKey: "api_data.api_mst_maparea",
                                              editorStore: ServerDataStore.oneTimeEditor())
     
index 3733255..3bb3edc 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterMapInfoMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterMapInfo",
+    let configuration = MappingConfiguration(entity: .masterMapInfo,
                                              dataKey: "api_data.api_mst_mapinfo",
                                              editorStore: ServerDataStore.oneTimeEditor())
     
index 2e6311d..7cde06f 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterMissionMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterMission",
+    let configuration = MappingConfiguration(entity: .masterMission,
                                              dataKey: "api_data.api_mst_mission",
                                              editorStore: ServerDataStore.oneTimeEditor())
     
index 96da10a..f75f8fb 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterSTypeMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterSType",
+    let configuration = MappingConfiguration(entity: .masterSType,
                                              dataKey: "api_data.api_mst_stype",
                                              editorStore: ServerDataStore.oneTimeEditor(),
                                              ignoreKeys: ["api_equip_type"])
index 44dff4e..ecc0b74 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterShipMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterShip",
+    let configuration = MappingConfiguration(entity: .masterShip,
                                              dataKey: "api_data.api_mst_ship",
                                              editorStore: ServerDataStore.oneTimeEditor())
     
index 01f6ebd..3ba64bd 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterSlotItemEquipTypeMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterSlotItemEquipType",
+    let configuration = MappingConfiguration(entity: .masterSlotItemEquipType,
                                              dataKey: "api_data.api_mst_slotitem_equiptype",
                                              editorStore: ServerDataStore.oneTimeEditor())
     
index 367bbcd..7de1e12 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterSlotItemMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterSlotItem",
+    let configuration = MappingConfiguration(entity: .masterSlotItem,
                                              dataKey: "api_data.api_mst_slotitem",
                                              editorStore: ServerDataStore.oneTimeEditor())
     
index 7472d0b..9a84c96 100644 (file)
@@ -10,7 +10,7 @@ import Cocoa
 
 class MasterUseItemMapper: JSONMapper {
     let apiResponse: APIResponse
-    let configuration = MappingConfiguration(entityName: "MasterUseItem",
+    let configuration = MappingConfiguration(entity: .masterUseItem,
                                              dataKey: "api_data.api_mst_useitem",
                                              editorStore: ServerDataStore.oneTimeEditor())
     
index b86ef4e..5513e24 100644 (file)
@@ -39,7 +39,7 @@ class MaterialMapper: JSONMapper {
     
     required init(_ apiResponse: APIResponse) {
         self.apiResponse = apiResponse
-        self.configuration = MappingConfiguration(entityName: "Material",
+        self.configuration = MappingConfiguration(entity: .material,
                                                   dataKey: dataKey(apiResponse),
                                                   editorStore: ServerDataStore.oneTimeEditor())
     }
index bb8a8de..eb3838b 100644 (file)
@@ -1,3 +1,4 @@
+
 //
 //  MissionStatus.swift
 //  KCD
@@ -35,7 +36,7 @@ class MissionStatus: NSObject {
         controller = NSArrayController()
         super.init()
         controller.managedObjectContext = ServerDataStore.default.managedObjectContext
-        controller.entityName = "Deck"
+        controller.entityName = Entity.deck.name
         controller.fetchPredicate = NSPredicate(format: "id = %ld", number)
         controller.automaticallyRearrangesObjects = true
         controller.fetch(nil)
index 94cadc2..af5dce0 100644 (file)
@@ -28,7 +28,7 @@ class NyukyoDockMapper: JSONMapper {
     
     required init(_ apiResponse: APIResponse) {
         self.apiResponse = apiResponse
-        self.configuration = MappingConfiguration(entityName: "NyukyoDock",
+        self.configuration = MappingConfiguration(entity: .nyukyoDock,
                                                   dataKey: dataKey(apiResponse),
                                                   editorStore: ServerDataStore.oneTimeEditor())
     }
index 861ffd1..ccc2903 100644 (file)
@@ -32,7 +32,7 @@ class NyukyoDockStatus: NSObject {
         controller = NSArrayController()
         super.init()
         controller.managedObjectContext = ServerDataStore.default.managedObjectContext
-        controller.entityName = "NyukyoDock"
+        controller.entityName = Entity.nyukyoDock.name
         controller.fetchPredicate = NSPredicate(format: "id = %ld", number)
         controller.automaticallyRearrangesObjects = true
         controller.fetch(nil)
index 82186d3..3c9c23d 100644 (file)
@@ -21,6 +21,9 @@ extension CoreDataIntormation {
 extension CoreDataCore {
     static let resourceHistory = CoreDataCore(.resourceHistory)
 }
+extension Entity {
+    static let resource = Entity(name: "Resource")
+}
 
 class ResourceHistoryDataStore: CoreDataAccessor, CoreDataManager {
     static var `default` = ResourceHistoryDataStore(type: .reader)
@@ -44,12 +47,12 @@ class ResourceHistoryDataStore: CoreDataAccessor, CoreDataManager {
 extension ResourceHistoryDataStore {
     func resources(in minites: [Int], older: Date) -> [KCResource] {
         let p = NSPredicate(format: "minute IN %@ AND date < %@", minites, older as NSDate)
-        guard let a = try? objects(withEntityName: "Resource", predicate: p),
+        guard let a = try? objects(with: .resource, predicate: p),
             let resources = a as? [KCResource]
             else { return [] }
         return resources
     }
     func cerateResource() -> KCResource? {
-        return insertNewObject(forEntityName: "Resource") as? KCResource
+        return insertNewObject(for: .resource) as? KCResource
     }
 }
index b7fd8f7..22c55e9 100644 (file)
@@ -21,6 +21,27 @@ extension CoreDataIntormation {
 extension CoreDataCore {
     static let kcd = CoreDataCore(.kcd)
 }
+extension Entity {
+    static let airBase = Entity(name: "AirBase")
+    static let airBasePlaneInfo = Entity(name: "AirBasePlaneInfo")
+    static let basic = Entity(name: "Basic")
+    static let deck = Entity(name: "Deck")
+    static let kenzoDock = Entity(name: "KenzoDock")
+    static let masterFurniture = Entity(name: "MasterFurniture")
+    static let masterMapArea = Entity(name: "MasterMapArea")
+    static let masterMapInfo = Entity(name: "MasterMapInfo")
+    static let masterMission = Entity(name: "MasterMission")
+    static let masterShip = Entity(name: "MasterShip")
+    static let masterSlotItem = Entity(name: "MasterSlotItem")
+    static let masterSlotItemEquipType = Entity(name: "MasterSlotItemEquipType")
+    static let masterSType = Entity(name: "MasterSType")
+    static let masterUseItem = Entity(name: "MasterUseItem")
+    static let material = Entity(name: "Material")
+    static let nyukyoDock = Entity(name: "NyukyoDock")
+    static let ship = Entity(name: "Ship")
+    static let slotItem = Entity(name: "SlotItem")
+    static let quest = Entity(name: "Quest")
+}
 
 class ServerDataStore: CoreDataAccessor, CoreDataManager {
     static var `default` = ServerDataStore(type: .reader)
@@ -43,44 +64,44 @@ class ServerDataStore: CoreDataAccessor, CoreDataManager {
 
 extension ServerDataStore {
     func airBases() -> [KCAirBase] {
-        guard let res = try? objects(withEntityName: "AirBase"),
+        guard let res = try? objects(with: .airBase),
             let airbase = res as? [KCAirBase]
             else { return [] }
         return airbase
     }
     func airBase(area: Int, base: Int) -> KCAirBase? {
         let p = NSPredicate(format: "area_id == %ld AND rid == %ld", area, base)
-        guard let a = try? objects(withEntityName: "AirBase", predicate: p),
+        guard let a = try? objects(with: .airBase, predicate: p),
             let airBases = a as? [KCAirBase],
             let airBase = airBases.first
             else { return nil }
         return airBase
     }
     func createAirBasePlaneInfo() -> KCAirBasePlaneInfo? {
-        return insertNewObject(forEntityName: "AirBasePlaneInfo") as? KCAirBasePlaneInfo
+        return insertNewObject(for: .airBasePlaneInfo) as? KCAirBasePlaneInfo
     }
     
     func basic() -> KCBasic? {
-        guard let b = try? objects(withEntityName: "Basic"),
+        guard let b = try? objects(with: .basic),
             let basics = b as? [KCBasic],
             let basic = basics.first
             else { return nil }
         return basic
     }
     func createBasic() -> KCBasic? {
-        return insertNewObject(forEntityName: "Basic") as? KCBasic
+        return insertNewObject(for: .basic) as? KCBasic
     }
     
     func decksSortedById() -> [KCDeck] {
         let sortDec = NSSortDescriptor(key: "id", ascending: true)
-        guard let d = try? objects(withEntityName: "Deck", sortDescriptors: [sortDec]),
+        guard let d = try? objects(with: .deck, sortDescriptors: [sortDec]),
             let decks = d as? [KCDeck]
             else { return [] }
         return decks
     }
     func deck(byId id: Int) -> KCDeck? {
         let p = NSPredicate(format: "id = %ld", id)
-        guard let d = try? objects(withEntityName: "Deck", predicate: p),
+        guard let d = try? objects(with: .deck, predicate: p),
             let decks = d as? [KCDeck],
             let deck = decks.first
             else { return nil }
@@ -89,7 +110,7 @@ extension ServerDataStore {
     
     func kenzoDock(byDockId dockId: Int) -> KCKenzoDock? {
         let dockPredicate = NSPredicate(format: "id = %ld", dockId)
-        guard let k = try? objects(withEntityName: "KenzoDock", predicate: dockPredicate),
+        guard let k = try? objects(with: .kenzoDock, predicate: dockPredicate),
             let kenzoDocks = k as? [KCKenzoDock],
             let kenzoDock = kenzoDocks.first
             else { return nil }
@@ -98,7 +119,7 @@ extension ServerDataStore {
     
     func mapArea(byId id: Int) -> KCMasterMapArea? {
         let predicate = NSPredicate(format: "id = %ld", id)
-        guard let a = try? objects(withEntityName: "MasterMapArea", predicate: predicate),
+        guard let a = try? objects(with: .masterMapArea, predicate: predicate),
             let mapAreas = a as? [KCMasterMapArea],
             let mapArea = mapAreas.first
             else { return nil }
@@ -107,7 +128,7 @@ extension ServerDataStore {
     
     func mapInfo(area: Int, no: Int) -> KCMasterMapInfo? {
         let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", no)
-        guard let m = try? objects(withEntityName: "MasterMapInfo", predicate: predicate),
+        guard let m = try? objects(with: .masterMapInfo, predicate: predicate),
             let mapInfos = m as? [KCMasterMapInfo],
             let mapInfo = mapInfos.first
             else { return nil }
@@ -117,7 +138,7 @@ extension ServerDataStore {
     
     func masterMission(by id: Int) -> KCMasterMission? {
         let p = NSPredicate(format: "id = %ld", id)
-        guard let ss = try? objects(withEntityName: "MasterMission", predicate: p),
+        guard let ss = try? objects(with: .masterMission, predicate: p),
             let missions = ss as? [KCMasterMission],
             let mission = missions.first
             else { return nil }
@@ -125,21 +146,21 @@ extension ServerDataStore {
     }
     
     func masterShips() -> [KCMasterShipObject] {
-        guard let s = try? objects(withEntityName: "MasterShip"),
+        guard let s = try? objects(with: .masterShip),
             let ships = s as? [KCMasterShipObject]
             else { return [] }
         return ships
     }
     func sortedMasterShipsById() -> [KCMasterShipObject] {
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let s = try? objects(withEntityName: "MasterShip", sortDescriptors: [sortDesc]),
+        guard let s = try? objects(with: .masterShip, sortDescriptors: [sortDesc]),
             let ships = s as? [KCMasterShipObject]
             else { return [] }
         return ships
     }
     func masterShip(byId id: Int) -> KCMasterShipObject? {
         let p = NSPredicate(format: "id = %ld", id)
-        guard let s = try? objects(withEntityName: "MasterShip", predicate: p),
+        guard let s = try? objects(with: .masterShip, predicate: p),
             let ships = s as? [KCMasterShipObject],
             let ship = ships.first
             else { return nil }
@@ -148,20 +169,20 @@ extension ServerDataStore {
     
     func sortedMasterSlotItemsById() -> [KCMasterSlotItemObject] {
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let ms = try? objects(withEntityName: "MasterSlotItem", sortDescriptors: [sortDesc]),
+        guard let ms = try? objects(with: .masterSlotItem, sortDescriptors: [sortDesc]),
             let masterSlotItems = ms as? [KCMasterSlotItemObject]
             else { return [] }
         return masterSlotItems
     }
     func masterSlotItems() -> [KCMasterSlotItemObject] {
-        guard let ms = try? objects(withEntityName: "MasterSlotItem"),
+        guard let ms = try? objects(with: .masterSlotItem),
             let masterSlotItems = ms as? [KCMasterSlotItemObject]
             else { return [] }
         return masterSlotItems
     }
     func masterSlotItem(by id: Int) -> KCMasterSlotItemObject? {
         let p = NSPredicate(format: "id = %ld", id)
-        guard let ma = try? objects(withEntityName: "MasterSlotItem", predicate: p),
+        guard let ma = try? objects(with: .masterSlotItem, predicate: p),
             let masterSlotItems = ma as? [KCMasterSlotItemObject],
             let masterSlotItem = masterSlotItems.first
             else { return nil }
@@ -170,7 +191,7 @@ extension ServerDataStore {
     
     func masterSlotItemEquipType(by id: Int) -> KCMasterSlotItemEquipTypeObject? {
         let predicate = NSPredicate(format: "id = %ld", id)
-        guard let a = try? objects(withEntityName: "MasterSlotItemEquipType", predicate: predicate),
+        guard let a = try? objects(with: .masterSlotItemEquipType, predicate: predicate),
             let types = a as? [KCMasterSlotItemEquipTypeObject],
             let type = types.first
             else { return nil }
@@ -178,7 +199,7 @@ extension ServerDataStore {
     }
     
     func masterSTypes() -> [KCMasterSType] {
-        guard let ms = try? objects(withEntityName: "MasterSType"),
+        guard let ms = try? objects(with: .masterSType),
             let masterSTypes = ms as? [KCMasterSType]
             else {
                 print("MaserShipCommand: MasterSType is not found")
@@ -188,7 +209,7 @@ extension ServerDataStore {
     }
     func sortedMasterSTypesById() -> [KCMasterSType] {
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let ms = try? objects(withEntityName: "MasterSType", sortDescriptors: [sortDesc]),
+        guard let ms = try? objects(with: .masterSType, sortDescriptors: [sortDesc]),
             let masterSTypes = ms as? [KCMasterSType]
             else {
                 print("MaserShipCommand: MasterSType is not found")
@@ -198,19 +219,19 @@ extension ServerDataStore {
     }
     
     func material() -> KCMaterial? {
-        guard let m = try? objects(withEntityName: "Material"),
+        guard let m = try? objects(with: .material),
             let materials = m as? [KCMaterial],
             let material = materials.first
             else { return nil }
         return material
     }
     func createMaterial() -> KCMaterial? {
-        return insertNewObject(forEntityName: "Material") as? KCMaterial
+        return insertNewObject(for: .material) as? KCMaterial
     }
     
     func nyukyoDock(by id: Int) -> KCNyukyoDock? {
         let p = NSPredicate(format: "id = %ld", id)
-        guard let d = try? objects(withEntityName: "NyukyoDock", predicate: p),
+        guard let d = try? objects(with: .nyukyoDock, predicate: p),
             let ndocks = d as? [KCNyukyoDock],
             let ndock = ndocks.first
             else { return nil }
@@ -219,7 +240,7 @@ extension ServerDataStore {
     
     func ships(byDeckId deckId: Int) -> [KCShipObject] {
         let predicate = NSPredicate(format: "id = %d", deckId)
-        guard let d = try? objects(withEntityName: "Deck", predicate: predicate),
+        guard let d = try? objects(with: .deck, predicate: predicate),
             let decks = d as? [KCDeck],
             let deck = decks.first
             else { return [] }
@@ -228,7 +249,7 @@ extension ServerDataStore {
     func ship(byId shipId: Int) -> KCShipObject? {
         if shipId < 1 { return nil }
         let predicate = NSPredicate(format: "id = %d", shipId)
-        guard let s = try? objects(withEntityName: "Ship", predicate: predicate),
+        guard let s = try? objects(with: .ship, predicate: predicate),
             let ships = s as? [KCShipObject],
             let ship = ships.first
             else { return nil }
@@ -236,33 +257,33 @@ extension ServerDataStore {
     }
     func ships(byId shipId: Int) -> [KCShipObject] {
         let predicate = NSPredicate(format: "id = %d", shipId)
-        guard let d = try? objects(withEntityName: "Ship", predicate: predicate),
+        guard let d = try? objects(with: .ship, predicate: predicate),
             let ships = d as? [KCShipObject]
             else { return [] }
         return ships
     }
     func ships(exclude shipIds: [Int]) -> [KCShipObject] {
         let predicate = NSPredicate(format: "NOT id IN %@", shipIds)
-        guard let s = try? objects(withEntityName: "Ship", predicate: predicate),
+        guard let s = try? objects(with: .ship, predicate: predicate),
             let ships = s as? [KCShipObject]
             else { return [] }
         return ships
     }
     func shipsInFleet() -> [KCShipObject] {
         let predicate = NSPredicate(format: "NOT fleet = 0")
-        guard let a = try? objects(withEntityName: "Ship", predicate: predicate),
+        guard let a = try? objects(with: .ship, predicate: predicate),
             let ships = a as? [KCShipObject]
             else { return [] }
         return ships
     }
     func createShip() -> KCShipObject? {
-        return insertNewObject(forEntityName: "Ship") as? KCShipObject
+        return insertNewObject(for: .ship) as? KCShipObject
     }
     
     func masterSlotItemID(bySlotItemId slotItemId: Int) -> Int {
         if slotItemId < 1 { return 0 }
         let predicate = NSPredicate(format: "id = %d", argumentArray: [slotItemId])
-        guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
+        guard let s = try? objects(with: .slotItem, predicate: predicate),
             let slotItems = s as? [KCSlotItemObject],
             let slotItem = slotItems.first
             else { return 0 }
@@ -271,7 +292,7 @@ extension ServerDataStore {
     
     func slotItem(byId itemId: Int) -> KCSlotItemObject? {
         let p = NSPredicate(format: "id = %ld", itemId)
-        guard let sl = try? objects(withEntityName: "SlotItem", predicate: p),
+        guard let sl = try? objects(with: .slotItem, predicate: p),
             let slotItems = sl as? [KCSlotItemObject],
             let slotItem = slotItems.first
             else { return nil }
@@ -279,41 +300,41 @@ extension ServerDataStore {
     }
     func sortedSlotItemsById() -> [KCSlotItemObject] {
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let s = try? objects(withEntityName: "SlotItem", sortDescriptors: [sortDesc]),
+        guard let s = try? objects(with: .slotItem, sortDescriptors: [sortDesc]),
             let slotItems = s as? [KCSlotItemObject]
             else { return [] }
         return slotItems
     }
     func slotItems() -> [KCSlotItemObject] {
-        guard let s = try? objects(withEntityName: "SlotItem"),
+        guard let s = try? objects(with: .slotItem),
             let slotItems = s as? [KCSlotItemObject]
             else { return [] }
         return slotItems
     }
     func slotItems(in itemIds: [Int]) -> [KCSlotItemObject] {
         let predicate = NSPredicate(format: "id IN %@", itemIds)
-        guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
+        guard let s = try? objects(with: .slotItem, predicate: predicate),
             let slotItems = s as? [KCSlotItemObject]
             else { return [] }
         return slotItems
     }
     func slotItems(exclude itemIds: [Int]) -> [KCSlotItemObject] {
         let predicate = NSPredicate(format: "NOT id IN %@", itemIds)
-        guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
+        guard let s = try? objects(with: .slotItem, predicate: predicate),
             let slotItems = s as? [KCSlotItemObject]
             else { return [] }
         return slotItems
     }
     func createSlotItem() -> KCSlotItemObject? {
-        return insertNewObject(forEntityName: "SlotItem") as? KCSlotItemObject
+        return insertNewObject(for: .slotItem) as? KCSlotItemObject
     }
     
     func quests() -> [KCQuest] {
-        return try! objects(withEntityName: "Quest") as? [KCQuest] ?? []
+        return try! objects(with: .quest) as? [KCQuest] ?? []
     }
     func quest(by no: Int) -> KCQuest? {
         let p = NSPredicate(format: "%K = %ld", "no", no)
-        guard let qu = try? objects(withEntityName: "Quest", predicate: p),
+        guard let qu = try? objects(with: .quest, predicate: p),
             let que = qu as? [KCQuest],
             let quest = que.first
             else { return nil }
@@ -321,19 +342,19 @@ extension ServerDataStore {
     }
     func quests(in range: CountableClosedRange<Int>) -> [KCQuest] {
         let p = NSPredicate(format: "%K In %@", "no", range.map {$0})
-        guard let qu = try? objects(withEntityName: "Quest", predicate: p),
+        guard let qu = try? objects(with: .quest, predicate: p),
             let quests = qu as? [KCQuest]
             else { return [] }
         return quests
     }
     func sortedQuestByNo() -> [KCQuest] {
         let sortDesc = NSSortDescriptor(key: "no", ascending: true)
-        guard let qu = try? objects(withEntityName: "Quest", sortDescriptors: [sortDesc]),
+        guard let qu = try? objects(with: .quest, sortDescriptors: [sortDesc]),
             let quests = qu as? [KCQuest]
             else { return [] }
         return quests
     }
     func createQuest() -> KCQuest? {
-        return insertNewObject(forEntityName: "Quest") as? KCQuest
+        return insertNewObject(for: .quest) as? KCQuest
     }
 }
index 35eb8cd..499d00b 100644 (file)
@@ -34,7 +34,7 @@ fileprivate func dataKey(_ apiResponse: APIResponse) -> String {
 
 extension MappingConfiguration {
     func change(dataKey: String) -> MappingConfiguration {
-        return MappingConfiguration(entityName: self.entityName,
+        return MappingConfiguration(entity: self.entity,
                                     dataKey: dataKey,
                                     primaryKey: self.primaryKey,
                                     compositPrimaryKeys: self.compositPrimaryKeys,
@@ -49,7 +49,7 @@ class ShipMapper: JSONMapper {
     
     required init(_ apiResponse: APIResponse) {
         self.apiResponse = apiResponse
-        self.configuration = MappingConfiguration(entityName: "Ship",
+        self.configuration = MappingConfiguration(entity: .ship,
                                                   dataKey: dataKey(apiResponse),
                                                   editorStore: ServerDataStore.oneTimeEditor(),
                                                   ignoreKeys:
index 99dc4d3..0cd3796 100644 (file)
@@ -30,7 +30,7 @@ class SlotItemMapper: JSONMapper {
     
     required init(_ apiResponse: APIResponse) {
         self.apiResponse = apiResponse
-        self.configuration = MappingConfiguration(entityName: "SlotItem",
+        self.configuration = MappingConfiguration(entity: .slotItem,
                                                   dataKey: dataKey(apiResponse),
                                                   editorStore: ServerDataStore.oneTimeEditor())
     }
index 0176c68..8882b0c 100644 (file)
@@ -87,18 +87,18 @@ class TSVSupport {
         }
     }
     
-    private func localData(_ name: String, sortBy: String = "date") -> [NSManagedObject] {
+    private func localData(_ entity: Entity, sortBy: String = "date") -> [NSManagedObject] {
         let sortDesc = NSSortDescriptor(key: sortBy, ascending: true)
-        guard let a = try? store.objects(withEntityName: name, sortDescriptors: [sortDesc], predicate: nil),
+        guard let a = try? store.objects(with: entity, sortDescriptors: [sortDesc], predicate: nil),
             let array = a as? [KaihatuHistory]
             else {
-                print("Can not get \(name)")
+                print("Can not get \(entity.name)")
                 return []
         }
         return array
     }
     private func dataOfKaihatuHistory() -> Data? {
-        return (localData("KaihatuHistory") as? [KaihatuHistory])?
+        return (localData(.kaihatuHistory) as? [KaihatuHistory])?
             .map {
                 LFSeparateLine.empty
                     .append($0.date)
@@ -117,7 +117,7 @@ class TSVSupport {
             .data(using: .utf8)
     }
     private func dataOfKenzoHistory() -> Data? {
-        return (localData("KenzoHistory") as? [KenzoHistory])?
+        return (localData(.kenzoHistory) as? [KenzoHistory])?
             .map {
             LFSeparateLine.empty
                 .append($0.date)
@@ -137,7 +137,7 @@ class TSVSupport {
             .data(using: .utf8)
     }
     private func dataOfKenzoMark() -> Data? {
-        return (localData("KenzoMark", sortBy: "kDockId") as? [KenzoMark])?
+        return (localData(.kenzoMark, sortBy: "kDockId") as? [KenzoMark])?
             .map {
             LFSeparateLine.empty
                 .append($0.date)
@@ -157,7 +157,7 @@ class TSVSupport {
             .data(using: .utf8)
     }
     private func dataOfDropShipHistory() -> Data? {
-        return (localData("DropShipHistory") as? [DropShipHistory])?
+        return (localData(.dropShipHistory) as? [DropShipHistory])?
             .map {
                 LFSeparateLine.empty
                     .append($0.date)
@@ -190,11 +190,11 @@ class TSVSupport {
                 let commandLv = Int(attr[9])
                 else { return }
             let p = NSPredicate(format: "date = %@", argumentArray: [date])
-            guard let oo = try? store.objects(withEntityName: "KaihatuHistory", predicate: p),
+            guard let oo = try? store.objects(with: .kaihatuHistory, predicate: p),
                 oo.count != 0
                 else { return }
             
-            guard let obj = store.insertNewObject(forEntityName: "KaihatuHistory") as? KaihatuHistory
+            guard let obj = store.insertNewObject(for: .kaihatuHistory) as? KaihatuHistory
                 else { return }
             
             obj.date = date
@@ -226,11 +226,11 @@ class TSVSupport {
                 let commandLv = Int(attr[10])
                 else { return }
             let p = NSPredicate(format: "date = %@", argumentArray: [date])
-            guard let oo = try? store.objects(withEntityName: "KenzoHistory", predicate: p),
+            guard let oo = try? store.objects(with: .kenzoHistory, predicate: p),
                 oo.count != 0
                 else { return }
             
-            guard let obj = store.insertNewObject(forEntityName: "KenzoHistory") as? KenzoHistory
+            guard let obj = store.insertNewObject(for: .kenzoHistory) as? KenzoHistory
                 else { return }
             
             obj.date = date
@@ -264,11 +264,11 @@ class TSVSupport {
                 let commandLv = Int(attr[10])
                 else { return }
             let p = NSPredicate(format: "date = %@", argumentArray: [date])
-            guard let oo = try? store.objects(withEntityName: "KenzoMark", predicate: p),
+            guard let oo = try? store.objects(with: .kenzoMark, predicate: p),
                 oo.count != 0
                 else { return }
             
-            guard let obj = store.insertNewObject(forEntityName: "KenzoMark") as? KenzoMark
+            guard let obj = store.insertNewObject(for: .kenzoMark) as? KenzoMark
                 else { return }
             
             obj.date = date
@@ -296,11 +296,11 @@ class TSVSupport {
                 let mark = Int(attr[7])
                 else { return }
             let p = NSPredicate(format: "date = %@", argumentArray: [date])
-            guard let oo = try? store.objects(withEntityName: "DropShipHistory", predicate: p),
+            guard let oo = try? store.objects(with: .dropShipHistory, predicate: p),
                 oo.count != 0
                 else { return }
             
-            guard let obj = store.insertNewObject(forEntityName: "DropShipHistory") as? DropShipHistory
+            guard let obj = store.insertNewObject(for: .dropShipHistory) as? DropShipHistory
                 else { return }
             
             obj.date = date
index 007ae60..550ed50 100644 (file)
@@ -20,6 +20,11 @@ extension CoreDataIntormation {
 extension CoreDataCore {
     static let temporary = CoreDataCore(.temporary)
 }
+extension Entity {
+    static let battle = Entity(name: "Battle")
+    static let damage = Entity(name: "Damage")
+    static let guardEscaped = Entity(name: "GuardEscaped")
+}
 
 class TemporaryDataStore: CoreDataAccessor, CoreDataManager {
     static var `default` = TemporaryDataStore(type: .reader)
@@ -45,7 +50,7 @@ extension TemporaryDataStore {
         return battles().first
     }
     func battles() -> [KCBattle] {
-        guard let a = try? self.objects(withEntityName: "Battle"),
+        guard let a = try? self.objects(with: .battle),
             let array = a as? [KCBattle]
             else { return [] }
         return array
@@ -53,33 +58,36 @@ extension TemporaryDataStore {
     func resetBattle() {
         battles().forEach { delete($0) }
     }
+    func createBattle() -> KCBattle? {
+        return insertNewObject(for: .battle) as? KCBattle
+    }
     
     func sortedDamagesById() -> [KCDamage] {
         let sortDescriptor = NSSortDescriptor(key: "id", ascending: true)
-        guard let a = try? objects(withEntityName: "Damage", sortDescriptors: [sortDescriptor]),
+        guard let a = try? objects(with: .damage, sortDescriptors: [sortDescriptor]),
             let array = a as? [KCDamage]
             else { return [] }
         return array
     }
     func damages() -> [KCDamage] {
-        guard let a = try? objects(withEntityName: "Damage"),
+        guard let a = try? objects(with: .damage),
             let array = a as? [KCDamage]
             else { return [] }
         return array
     }
     func createDamage() -> KCDamage? {
-        return insertNewObject(forEntityName: "Damage") as? KCDamage
+        return insertNewObject(for: .damage) as? KCDamage
     }
     
     func guardEscaped() -> [KCGuardEscaped] {
-        guard let e = try? objects(withEntityName: "GuardEscaped"),
+        guard let e = try? objects(with: .guardEscaped),
             let escapeds = e as? [KCGuardEscaped]
             else { return [] }
         return escapeds
     }
     func ensuredGuardEscaped(byShipId shipId: Int) -> KCGuardEscaped? {
         let p = NSPredicate(format: "shipID = %ld AND ensured = TRUE", shipId)
-        guard let e = try? objects(withEntityName: "GuardEscaped", predicate: p),
+        guard let e = try? objects(with: .guardEscaped, predicate: p),
             let escapes = e as? [KCGuardEscaped],
             let escape = escapes.first
             else { return nil }
@@ -87,12 +95,12 @@ extension TemporaryDataStore {
     }
     func notEnsuredGuardEscaped() -> [KCGuardEscaped] {
         let predicate = NSPredicate(format: "ensured = FALSE")
-        guard let e = try? objects(withEntityName: "GuardEscaped", predicate: predicate),
+        guard let e = try? objects(with: .guardEscaped, predicate: predicate),
             let escapeds = e as? [KCGuardEscaped]
             else { return [] }
         return escapeds
     }
     func createGuardEscaped() -> KCGuardEscaped? {
-        return insertNewObject(forEntityName: "GuardEscaped") as? KCGuardEscaped
+        return insertNewObject(for: .guardEscaped) as? KCGuardEscaped
     }
 }