OSDN Git Service

observe(_:options:changeHandler:)を使用するようにした
authormasakih <masakih@users.sourceforge.jp>
Sun, 8 Oct 2017 13:11:06 +0000 (22:11 +0900)
committermasakih <masakih@users.sourceforge.jp>
Sun, 8 Oct 2017 13:11:06 +0000 (22:11 +0900)
KCD/AirBaseWindowController.swift
KCD/ExternalBrowserWindowController.swift
KCD/PowerUpSupportViewController.swift
KCD/ShipViewController.swift

index b7d667b..9157752 100644 (file)
@@ -17,6 +17,8 @@ final class AirBaseWindowController: NSWindowController {
     @IBOutlet var planesTable: NSTableView!
     @IBOutlet var airBaseController: NSArrayController!
     
+    private var contentObservation: NSKeyValueObservation?
+    
     override var windowNibName: NSNib.Name {
         
         return .nibName(instanceOf: self)
@@ -51,25 +53,19 @@ final class AirBaseWindowController: NSWindowController {
     override func windowDidLoad() {
         
         super.windowDidLoad()
-        
-        airBaseController.addObserver(self, forKeyPath: #keyPath(NSArrayController.content), context: nil)
-    }
-    
-    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
-        
-        guard keyPath == #keyPath(NSArrayController.content) else {
+                
+        contentObservation = airBaseController.observe(\NSArrayController.content) { [weak self] _, _ in
             
-            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
-            return
-        }
-        
-        updateAreaRadio()
-        updatePlaneSegment()
-        
-        if areaId == 0 {
+            guard let `self` = self else { return }
             
-            areaId = areas.first ?? 0
-            updatePredicate()
+            self.updateAreaRadio()
+            self.updatePlaneSegment()
+            
+            if self.areaId == 0 {
+                
+                self.areaId = self.areas.first ?? 0
+                self.updatePredicate()
+            }
         }
     }
     
index 3d797e9..e6af084 100644 (file)
@@ -22,16 +22,13 @@ final class ExternalBrowserWindowController: NSWindowController {
     
     let managedObjectContext = BookmarkManager.shared().manageObjectContext
     
-    deinit {
-        
-        webView.removeObserver(self, forKeyPath: #keyPath(webView.canGoBack))
-        webView.removeObserver(self, forKeyPath: #keyPath(webView.canGoForward))
-    }
-    
     @IBOutlet var webView: WebView!
     @IBOutlet var goSegment: NSSegmentedControl!
     @IBOutlet var bookmarkListView: NSView!
     
+    private var canGoBackObservation: NSKeyValueObservation?
+    private var canGoForwardObservation: NSKeyValueObservation?
+    
     override var windowNibName: NSNib.Name {
         
         return .nibName(instanceOf: self)
@@ -132,29 +129,21 @@ final class ExternalBrowserWindowController: NSWindowController {
         
         super.windowDidLoad()
         
-        webView.addObserver(self, forKeyPath: #keyPath(webView.canGoBack), context: nil)
-        webView.addObserver(self, forKeyPath: #keyPath(webView.canGoForward), context: nil)
-        webView.applicationNameForUserAgent = AppDelegate.shared.appNameForUserAgent
-        webView.frameLoadDelegate = self
-    }
-    
-    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
-        
-        if keyPath == #keyPath(webView.canGoBack) {
+        canGoBackObservation = webView.observe(\WebView.canGoBack) { [weak self] _, _ in
             
-            goSegment.setEnabled(webView.canGoBack, forSegment: 0)
+            guard let `self` = self else { return }
             
-            return
+            self.goSegment.setEnabled(self.webView.canGoBack, forSegment: 0)
         }
-        
-        if keyPath == #keyPath(webView.canGoForward) {
+        canGoForwardObservation = webView.observe(\WebView.canGoForward) { [weak self] _, _ in
             
-            goSegment.setEnabled(webView.canGoForward, forSegment: 1)
+            guard let `self` = self else { return }
             
-            return
+            self.goSegment.setEnabled(self.webView.canGoForward, forSegment: 1)
         }
         
-        super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
+        webView.applicationNameForUserAgent = AppDelegate.shared.appNameForUserAgent
+        webView.frameLoadDelegate = self
     }
     
     override func swipe(with event: NSEvent) {
index d8b137e..ca37712 100644 (file)
@@ -12,14 +12,11 @@ final class PowerUpSupportViewController: MainTabVIewItemViewController {
     
     @objc let managedObjectContext = ServerDataStore.default.context
     
-    deinit {
-        
-        shipController.removeObserver(self, forKeyPath: NSBindingName.sortDescriptors.rawValue)
-    }
-    
     @IBOutlet var shipController: NSArrayController!
     @IBOutlet weak var typeSegment: NSSegmentedControl!
     
+    private var sortDescriptorsObservation: NSKeyValueObservation?
+    
     override var hasShipTypeSelector: Bool { return true }
     override var selectedShipType: ShipTabType {
         
@@ -67,19 +64,10 @@ final class PowerUpSupportViewController: MainTabVIewItemViewController {
         }
         
         shipController.sortDescriptors = UserDefaults.standard[.powerupSupportSortDecriptors]
-        shipController.addObserver(self, forKeyPath: NSBindingName.sortDescriptors.rawValue, context: nil)
-    }
-    
-    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
-        
-        if keyPath == NSBindingName.sortDescriptors.rawValue {
+        sortDescriptorsObservation = shipController.observe(\NSArrayController.sortDescriptors) { [weak self] _, _ in
             
-            UserDefaults.standard[.powerupSupportSortDecriptors] = shipController.sortDescriptors
-            
-            return
+            UserDefaults.standard[.powerupSupportSortDecriptors] = self?.shipController.sortDescriptors ?? []
         }
-        
-        super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
     }
     
     private func customPredicate() -> NSPredicate? {
index 4d7b96e..ec7da25 100644 (file)
@@ -32,6 +32,9 @@ final class ShipViewController: MainTabVIewItemViewController {
     @IBOutlet var power3TableView: NSScrollView!
     @IBOutlet weak var standardDeviationField: NSTextField!
     
+    private var sortDescriptorsObservation: NSKeyValueObservation?
+    private var arrangedObjectsObservation: NSKeyValueObservation?
+    
     override var nibName: NSNib.Name {
         
         return .nibName(instanceOf: self)
@@ -80,8 +83,15 @@ final class ShipViewController: MainTabVIewItemViewController {
         }
         
         shipController.sortDescriptors = UserDefaults.standard[.shipviewSortDescriptors]
-        shipController.addObserver(self, forKeyPath: NSBindingName.sortDescriptors.rawValue, context: nil)
-        shipController.addObserver(self, forKeyPath: #keyPath(NSArrayController.arrangedObjects), context: nil)
+        
+        sortDescriptorsObservation = shipController.observe(\NSArrayController.sortDescriptors) { [weak self] _, _ in
+            
+            UserDefaults.standard[.shipviewSortDescriptors] = self?.shipController.sortDescriptors ?? []
+        }
+        arrangedObjectsObservation = shipController.observe(\NSArrayController.arrangedObjects) { [weak self] _, _ in
+            
+            self?.notifyChangeValue(forKey: #keyPath(standardDeviation))
+        }
         
         let tableViews = [expTableView, powerTableView, power2TableView, power3TableView]
         tableViews
@@ -103,25 +113,6 @@ final class ShipViewController: MainTabVIewItemViewController {
         #endif
     }
     
-    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
-        
-        if keyPath == NSBindingName.sortDescriptors.rawValue {
-            
-            UserDefaults.standard[.shipviewSortDescriptors] = shipController.sortDescriptors
-            
-            return
-        }
-        
-        if keyPath == #keyPath(NSArrayController.arrangedObjects) {
-            
-            notifyChangeValue(forKey: #keyPath(standardDeviation))
-            
-            return
-        }
-        
-        super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
-    }
-    
     private func showView(with type: ViewType) {
         
         let newSelection: NSView = {