}
// MARK: - struct
-struct CoreDataIntormation {
+struct CoreDataConfiguration {
let modelName: String
let fileName: String
let options: [AnyHashable: Any]
}
struct CoreDataCore {
- let info: CoreDataIntormation
+ let config: CoreDataConfiguration
let model: NSManagedObjectModel
let coordinator: NSPersistentStoreCoordinator
let parentContext: NSManagedObjectContext
- init(_ info: CoreDataIntormation) {
- self.info = info
+ init(_ config: CoreDataConfiguration) {
+ self.config = config
do {
- (model, coordinator, parentContext) = try genarate(info)
+ (model, coordinator, parentContext) = try genarate(config)
} catch {
NSApplication.shared().presentError(error)
fatalError("CoreDataCore: can not initialize. \(error)")
extension CoreDataManager where Self: CoreDataProvider {
func removeDataFile() {
- remove(name: core.info.fileName)
+ remove(name: core.config.fileName)
}
}
.forEach { removeDataFile(at: $0) }
}
-func genarate(_ info: CoreDataIntormation) throws ->
+func genarate(_ config: CoreDataConfiguration) throws ->
(model: NSManagedObjectModel, coordinator: NSPersistentStoreCoordinator, moc: NSManagedObjectContext) {
do {
- let model = try createModel(info)
- let coordinator = try getCoordinator(info, model)
+ let model = try createModel(config)
+ let coordinator = try getCoordinator(config, model)
let moc = createContext(coordinator)
return (model: model, coordinator: coordinator, moc: moc)
} catch {
}
// MARK: - NSManagedObjectContext and ...
-private func createModel(_ info: CoreDataIntormation) throws -> NSManagedObjectModel {
- guard let modelURL = Bundle.main.url(forResource: info.modelName, withExtension: "momd"),
+private func createModel(_ config: CoreDataConfiguration) throws -> NSManagedObjectModel {
+ guard let modelURL = Bundle.main.url(forResource: config.modelName, withExtension: "momd"),
let model = NSManagedObjectModel(contentsOf: modelURL)
else {
throw CoreDataError.couldNotCreateModel
}
return model
}
-private func getCoordinator(_ info: CoreDataIntormation,
+private func getCoordinator(_ config: CoreDataConfiguration,
_ model: NSManagedObjectModel) throws -> NSPersistentStoreCoordinator {
do {
- return try createCoordinator(info, model)
+ return try createCoordinator(config, model)
} catch {
let nserror = error as NSError
// Data Modelが更新されていたらストアファイルを削除してもう一度
if nserror.domain == NSCocoaErrorDomain,
(nserror.code == 134130 || nserror.code == 134110),
- info.tryRemake {
- remove(name: info.fileName)
+ config.tryRemake {
+ remove(name: config.fileName)
do {
- return try createCoordinator(info, model)
+ return try createCoordinator(config, model)
} catch {
print("Fail crrate NSPersistentStoreCoordinator twice.")
}
throw error
}
}
-private func createCoordinator(_ info: CoreDataIntormation,
+private func createCoordinator(_ config: CoreDataConfiguration,
_ model: NSManagedObjectModel) throws -> NSPersistentStoreCoordinator {
if !checkDirectory(ApplicationDirecrories.support) {
let failureReason = "Can not use directory \(ApplicationDirecrories.support.path)"
}
let coordinator: NSPersistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: model)
- let url = ApplicationDirecrories.support.appendingPathComponent(info.fileName)
+ let url = ApplicationDirecrories.support.appendingPathComponent(config.fileName)
do {
- try coordinator.addPersistentStore(ofType: info.type,
+ try coordinator.addPersistentStore(ofType: config.type,
configurationName: nil,
at: url,
- options: info.options)
+ options: config.options)
} catch {
throw error
}