OSDN Git Service

Swift4.0にコンバートした
[kcd/KCD.git] / KCD / PowerUpSupportViewController.swift
1 //
2 //  PowerUpSupportViewController.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2016/12/25.
6 //  Copyright © 2016年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class PowerUpSupportViewController: MainTabVIewItemViewController {
12     
13     @objc let managedObjectContext = ServerDataStore.default.context
14     
15     deinit {
16         
17         shipController.removeObserver(self, forKeyPath: NSBindingName.sortDescriptors.rawValue)
18     }
19     
20     @IBOutlet var shipController: NSArrayController!
21     @IBOutlet weak var typeSegment: NSSegmentedControl!
22     
23     override var hasShipTypeSelector: Bool { return true }
24     override var selectedShipType: ShipTabType {
25         
26         didSet {
27             shipController.filterPredicate = customPredicate()
28             shipController.rearrangeObjects()
29         }
30     }
31     
32     override var nibName: NSNib.Name {
33         
34         return .nibName(instanceOf: self)
35     }
36     
37     var omitPredicate: NSPredicate? {
38         
39         let sd = UserDefaults.standard
40         let hideKyes = [(Bool, String)]()
41             .appended { (sd[.hideMaxKaryoku], "isMaxKaryoku != TRUE") }
42             .appended { (sd[.hideMaxRaisou], "isMaxRaisou != TRUE") }
43             .appended { (sd[.hideMaxTaiku], "isMaxTaiku != TRUE") }
44             .appended { (sd[.hideMaxSoukou], "isMaxSoukou != TRUE") }
45             .appended { (sd[.hideMaxLucky], "isMaxLucky != TRUE") }
46             .flatMap { (b, s) in b ? s : nil }
47         
48         if hideKyes.isEmpty { return nil }
49         
50         return NSPredicate(format: hideKyes.joined(separator: " AND "))
51     }
52     
53     override func viewDidLoad() {
54         
55         super.viewDidLoad()
56         
57         changeCategory(nil)
58         
59         do {
60             
61             try shipController.fetch(with: nil, merge: true)
62             
63         } catch {
64             
65             fatalError("PowerUpSupportViewController: can not fetch. \(error)")
66             
67         }
68         
69         shipController.sortDescriptors = UserDefaults.standard[.powerupSupportSortDecriptors]
70         shipController.addObserver(self, forKeyPath: NSBindingName.sortDescriptors.rawValue, context: nil)
71     }
72     
73     override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
74         
75         if keyPath == NSBindingName.sortDescriptors.rawValue {
76             
77             UserDefaults.standard[.powerupSupportSortDecriptors] = shipController.sortDescriptors
78             
79             return
80         }
81         
82         super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
83     }
84     
85     private func customPredicate() -> NSPredicate? {
86         
87         switch (shipTypePredicte, omitPredicate) {
88             
89         case let (s?, o?): return NSCompoundPredicate(type: .and, subpredicates: [o, s])
90         case let (s?, nil): return s
91         case let (nil, o?): return o
92         default: return nil
93         }
94     }
95     
96     @IBAction func changeCategory(_ sender: AnyObject?) {
97         
98         ShipTabType(rawValue: typeSegment.selectedSegment).map { selectedShipType = $0 }
99     }
100 }