From ba53abd2c86f70053cbffd4711c7a64ba4931138 Mon Sep 17 00:00:00 2001 From: masakih Date: Thu, 15 Mar 2018 00:33:17 +0900 Subject: [PATCH] =?utf8?q?save=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89?= =?utf8?q?=E3=82=92=E4=B8=80=E6=9C=AC=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KCD.xcodeproj/project.pbxproj | 6 ++-- KCD/BookmarkListViewController.swift | 2 +- KCD/BookmarkManager.swift | 2 +- KCD/CoreDataManager.swift | 60 ++++++++++++------------------------ KCD/GuardShelterCommand.swift | 6 ++-- KCD/HistoryTableViewController.swift | 2 +- KCD/JSONMapper.swift | 2 +- KCD/MapInfoCommand.swift | 2 +- 8 files changed, 31 insertions(+), 51 deletions(-) diff --git a/KCD.xcodeproj/project.pbxproj b/KCD.xcodeproj/project.pbxproj index eecad9df..e55e191e 100644 --- a/KCD.xcodeproj/project.pbxproj +++ b/KCD.xcodeproj/project.pbxproj @@ -1153,13 +1153,13 @@ F4BEEEA818D88FF30006F70C /* CoreData */ = { isa = PBXGroup; children = ( - F4BDEEB11E73FE2000D689AE /* Entity.swift */, F4E471281E46ECF1009B5AF4 /* CoreDataCore.swift */, - F4C4A57E201464E300F8B732 /* CoreDataProviderExtension.swift */, - F4FF44D71FA21BF200039F21 /* CoreDataManager.swift */, F44AA2661E814A4400EED8BE /* MOCGenerator.swift */, + F4BDEEB11E73FE2000D689AE /* Entity.swift */, + F4FF44D71FA21BF200039F21 /* CoreDataManager.swift */, F481D63E1F9105CB007E2CBE /* Entities.swift */, F4FC3E8D1E4368BB00E41228 /* KCManagedObject.swift */, + F4C4A57E201464E300F8B732 /* CoreDataProviderExtension.swift */, F4F9F8911C6BA26400D0EE76 /* KCD */, F4F9F8921C6BA28200D0EE76 /* Local */, F4F9F8931C6BA29500D0EE76 /* Temporary */, diff --git a/KCD/BookmarkListViewController.swift b/KCD/BookmarkListViewController.swift index 1aa87973..b5952c0a 100644 --- a/KCD/BookmarkListViewController.swift +++ b/KCD/BookmarkListViewController.swift @@ -160,7 +160,7 @@ extension BookmarkListViewController: NSTableViewDelegate, NSTableViewDataSource bookmark.order = targetOrder + $0.offset + 1 } - store.save(errorHandler: store.presentOnMainThread) + store.save() self.bookmarkController.rearrangeObjects() self.reorderingBoolmarks() diff --git a/KCD/BookmarkManager.swift b/KCD/BookmarkManager.swift index 467bc4b4..437fef0a 100644 --- a/KCD/BookmarkManager.swift +++ b/KCD/BookmarkManager.swift @@ -77,7 +77,7 @@ final class BookmarkManager: NSObject, NSMenuDelegate { return nil } - editorStore.save(errorHandler: editorStore.presentOnMainThread) + editorStore.save() return new } diff --git a/KCD/CoreDataManager.swift b/KCD/CoreDataManager.swift index 29a2c8d6..b97c131a 100644 --- a/KCD/CoreDataManager.swift +++ b/KCD/CoreDataManager.swift @@ -30,8 +30,7 @@ protocol CoreDataProvider { var context: NSManagedObjectContext { get } - func save(errorHandler: (Error) -> Void) - func save() throws + func save(errorHandler: @escaping (Error) -> Void) } protocol CoreDataAccessor: CoreDataProvider { @@ -55,6 +54,21 @@ protocol CoreDataManager: CoreDataAccessor { static func oneTimeEditor() -> Self } +func presentOnMainThread(_ error: Error) { + + if Thread.isMainThread { + + NSApp.presentError(error) + + } else { + + DispatchQueue.main.sync { + + _ = NSApp.presentError(error) + } + } +} + // MARK: - Extension extension CoreDataProvider { @@ -67,19 +81,7 @@ extension CoreDataProvider { } } - func save(errorHandler: (Error) -> Void) { - - do { - - try save() - - } catch { - - errorHandler(error) - } - } - - func save() throws { + func save(errorHandler: @escaping (Error) -> Void = presentOnMainThread) { // parentを辿ってsaveしていく func propagateSaveAsync(_ context: NSManagedObjectContext) { @@ -99,17 +101,16 @@ extension CoreDataProvider { } catch { - Logger.shared.log("Could not save context as \(error)") + errorHandler(error) } } } - var caughtError: Error? context.performAndWait { guard context.commitEditing() else { - caughtError = CoreDataError.couldNotSave("Unable to commit editing before saveing") + errorHandler(CoreDataError.couldNotSave("Unable to commit editing before saveing")) return } @@ -123,28 +124,7 @@ extension CoreDataProvider { } catch let error as NSError { - caughtError = CoreDataError.couldNotSave(error.localizedDescription) - return - } - } - - if let error = caughtError { - - throw error - } - } - - func presentOnMainThread(_ error: Error) { - - if Thread.isMainThread { - - NSApp.presentError(error) - - } else { - - DispatchQueue.main.sync { - - _ = NSApp.presentError(error) + errorHandler(CoreDataError.couldNotSave(error.localizedDescription)) } } } diff --git a/KCD/GuardShelterCommand.swift b/KCD/GuardShelterCommand.swift index d1d1266d..85587827 100644 --- a/KCD/GuardShelterCommand.swift +++ b/KCD/GuardShelterCommand.swift @@ -108,7 +108,7 @@ final class GuardShelterCommand: JSONCommand { let store = TemporaryDataStore.oneTimeEditor() store.sync { store.notEnsuredGuardEscaped().forEach(store.delete) - store.save(errorHandler: store.presentOnMainThread) + store.save() } Thread.sleep(forTimeInterval: 0.1) notify() @@ -119,7 +119,7 @@ final class GuardShelterCommand: JSONCommand { let store = TemporaryDataStore.oneTimeEditor() store.sync { store.guardEscaped().forEach(store.delete) - store.save(errorHandler: store.presentOnMainThread) + store.save() } Thread.sleep(forTimeInterval: 0.1) notify() @@ -130,7 +130,7 @@ final class GuardShelterCommand: JSONCommand { let store = TemporaryDataStore.oneTimeEditor() store.sync { store.guardEscaped().forEach { $0.ensured = true } - store.save(errorHandler: store.presentOnMainThread) + store.save() } Thread.sleep(forTimeInterval: 0.1) notify() diff --git a/KCD/HistoryTableViewController.swift b/KCD/HistoryTableViewController.swift index 9f995648..9388725d 100644 --- a/KCD/HistoryTableViewController.swift +++ b/KCD/HistoryTableViewController.swift @@ -80,7 +80,7 @@ class HistoryTableViewController: NSViewController { history.mark = !history.mark } - store.save(errorHandler: store.presentOnMainThread) + store.save() } } diff --git a/KCD/JSONMapper.swift b/KCD/JSONMapper.swift index b6a18c94..013a3708 100644 --- a/KCD/JSONMapper.swift +++ b/KCD/JSONMapper.swift @@ -171,7 +171,7 @@ extension JSONMapper { } finishOperating() - store.save(errorHandler: store.presentOnMainThread) + store.save() } func commit() { diff --git a/KCD/MapInfoCommand.swift b/KCD/MapInfoCommand.swift index 367af51d..c8bb0bec 100644 --- a/KCD/MapInfoCommand.swift +++ b/KCD/MapInfoCommand.swift @@ -20,7 +20,7 @@ final class MapInfoCommand: JSONCommand { let store = ServerDataStore.oneTimeEditor() store.sync { store.airBases().forEach(store.delete) - store.save(errorHandler: store.presentOnMainThread) + store.save() } AirBaseMapper(apiResponse).commit() -- 2.11.0