OSDN Git Service

saveメソッドを一本化
authormasakih <masakih@users.sourceforge.jp>
Wed, 14 Mar 2018 15:33:17 +0000 (00:33 +0900)
committermasakih <masakih@users.sourceforge.jp>
Sun, 18 Mar 2018 01:40:33 +0000 (10:40 +0900)
KCD.xcodeproj/project.pbxproj
KCD/BookmarkListViewController.swift
KCD/BookmarkManager.swift
KCD/CoreDataManager.swift
KCD/GuardShelterCommand.swift
KCD/HistoryTableViewController.swift
KCD/JSONMapper.swift
KCD/MapInfoCommand.swift

index eecad9d..e55e191 100644 (file)
                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 */,
index 1aa8797..b5952c0 100644 (file)
@@ -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()
index 467bc4b..437fef0 100644 (file)
@@ -77,7 +77,7 @@ final class BookmarkManager: NSObject, NSMenuDelegate {
                 return nil
             }
             
-            editorStore.save(errorHandler: editorStore.presentOnMainThread)
+            editorStore.save()
             
             return new
         }
index 29a2c8d..b97c131 100644 (file)
@@ -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))
             }
         }
     }
index d1d1266..8558782 100644 (file)
@@ -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()
index 9f99564..9388725 100644 (file)
@@ -80,7 +80,7 @@ class HistoryTableViewController: NSViewController {
                 history.mark = !history.mark
             }
             
-            store.save(errorHandler: store.presentOnMainThread)
+            store.save()
         }
     }
     
index b6a18c9..013a370 100644 (file)
@@ -171,7 +171,7 @@ extension JSONMapper {
         }
         
         finishOperating()
-        store.save(errorHandler: store.presentOnMainThread)
+        store.save()
     }
     
     func commit() {
index 367af51..c8bb0be 100644 (file)
@@ -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()