OSDN Git Service

不要となっていたプロパティを削除
[kcd/KCD.git] / KCD / AirBaseWindowController.swift
index c4d3b79..b854c9a 100644 (file)
@@ -12,10 +12,12 @@ final class AirBaseWindowController: NSWindowController {
     
     @objc let managedObjectContext = ServerDataStore.default.context
     
-    @IBOutlet var areaMatrix: NSMatrix!
-    @IBOutlet var squadronTab: NSSegmentedControl!
-    @IBOutlet var planesTable: NSTableView!
-    @IBOutlet var airBaseController: NSArrayController!
+    @IBOutlet private var areaMatrix: NSMatrix!
+    @IBOutlet private var squadronTab: NSSegmentedControl!
+    @IBOutlet private var planesTable: NSTableView!
+    @IBOutlet private var airBaseController: NSArrayController!
+    
+    private var contentObservation: NSKeyValueObservation?
     
     override var windowNibName: NSNib.Name {
         
@@ -25,6 +27,7 @@ final class AirBaseWindowController: NSWindowController {
     @objc dynamic var areaId: Int = 0 {
         
         didSet {
+            
             updatePredicate()
             updatePlaneSegment()
         }
@@ -33,6 +36,7 @@ final class AirBaseWindowController: NSWindowController {
     @objc dynamic var rId: Int = 1 {
         
         didSet {
+            
             updatePredicate()
             updatePlaneSegment()
         }
@@ -40,11 +44,13 @@ final class AirBaseWindowController: NSWindowController {
     
     private var areas: [Int] {
         
-        guard let content = airBaseController.content as? [AirBase]
-            else { return [] }
+        guard let content = airBaseController.content as? [AirBase] else {
+            
+            return []
+        }
         
         return content
-            .flatMap { $0.area_id }
+            .compactMap { $0.area_id }
             .unique()
             .sorted(by: <)
     }
@@ -52,24 +58,22 @@ final class AirBaseWindowController: NSWindowController {
     override func windowDidLoad() {
         
         super.windowDidLoad()
-        
-        airBaseController.addObserver(self, forKeyPath: "content", context: nil)
-    }
-    
-    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
-        
-        guard keyPath == "content" else {
-            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
-            return
-        }
-        
-        updateAreaRadio()
-        updatePlaneSegment()
-        
-        if areaId == 0 {
+                
+        contentObservation = airBaseController.observe(\NSArrayController.content) { [weak self] _, _ in
             
-            areaId = areas.first ?? 0
-            updatePredicate()
+            guard let `self` = self else {
+                
+                return
+            }
+            
+            self.updateAreaRadio()
+            self.updatePlaneSegment()
+            
+            if self.areaId == 0 {
+                
+                self.areaId = self.areas.first ?? 0
+                self.updatePredicate()
+            }
         }
     }
     
@@ -79,10 +83,16 @@ final class AirBaseWindowController: NSWindowController {
         let areas = self.areas
         let currentTags = areaMatrix.cells.map { $0.tag }
         
-        if currentTags == areas { return }
+        if currentTags == areas {
+            
+            return
+        }
         
         // 最初の設定以外でareasが空の場合は処理をしない
-        if areas.isEmpty, areaId != 0 { return }
+        if areas.isEmpty, areaId != 0 {
+            
+            return
+        }
         
         let cellCount = areaMatrix.numberOfRows * areaMatrix.numberOfColumns
         if areas.count != cellCount {
@@ -126,8 +136,10 @@ final class AirBaseWindowController: NSWindowController {
     
     private func updatePlaneSegment() {
         
-        guard let content = airBaseController.content as? [AirBase]
-            else { return }
+        guard let content = airBaseController.content as? [AirBase] else {
+            
+            return
+        }
         
         let area = NSCountedSet()
         content.forEach { area.add($0.area_id) }
@@ -137,7 +149,9 @@ final class AirBaseWindowController: NSWindowController {
     
     private func updatePredicate() {
         
-        airBaseController.filterPredicate = NSPredicate(format: "area_id = %ld AND rid = %ld", areaId, rId)
+        airBaseController.filterPredicate = NSPredicate.empty
+            .and(NSPredicate(#keyPath(AirBase.area_id), equal: areaId))
+            .and(NSPredicate(#keyPath(AirBase.rid), equal: rId))
         airBaseController.setSelectionIndex(0)
         planesTable.deselectAll(nil)
     }
@@ -147,8 +161,10 @@ extension AirBaseWindowController: NSTableViewDelegate {
     
     func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
         
-        guard let identifier = tableColumn?.identifier
-            else { return nil }
+        guard let identifier = tableColumn?.identifier else {
+            
+            return nil
+        }
         
         return tableView.makeView(withIdentifier: identifier, owner: nil)
     }