2 // PowerUpSupportViewController.swift
5 // Created by Hori,Masaki on 2016/12/25.
6 // Copyright © 2016年 Hori,Masaki. All rights reserved.
11 final class PowerUpSupportViewController: MainTabVIewItemViewController {
13 @objc let managedObjectContext = ServerDataStore.default.context
15 @IBOutlet private var shipController: NSArrayController!
16 @IBOutlet private weak var typeSegment: NSSegmentedControl!
18 private var sortDescriptorsObservation: NSKeyValueObservation?
20 override var hasShipTypeSelector: Bool { return true }
21 override var selectedShipType: ShipTabType {
25 shipController.filterPredicate = customPredicate()
26 shipController.rearrangeObjects()
30 override var nibName: NSNib.Name {
32 return .nibName(instanceOf: self)
35 var omitPredicate: NSPredicate? {
37 let sd = UserDefaults.standard
38 let predicates = [(Bool, NSPredicate)]()
39 .appended { (sd[.hideMaxKaryoku], .false(#keyPath(Ship.isMaxKaryoku))) }
40 .appended { (sd[.hideMaxRaisou], .false(#keyPath(Ship.isMaxRaisou))) }
41 .appended { (sd[.hideMaxTaiku], .false(#keyPath(Ship.isMaxTaiku))) }
42 .appended { (sd[.hideMaxSoukou], .false(#keyPath(Ship.isMaxSoukou))) }
43 .appended { (sd[.hideMaxLucky], .false(#keyPath(Ship.isMaxLucky))) }
44 .compactMap { (b, s) in b ? s : nil }
46 if predicates.isEmpty {
51 return .and(predicates)
54 override func viewDidLoad() {
62 try shipController.fetch(with: nil, merge: true)
66 fatalError("PowerUpSupportViewController: can not fetch. \(error)")
69 shipController.sortDescriptors = UserDefaults.standard[.powerupSupportSortDecriptors]
70 sortDescriptorsObservation = shipController.observe(\NSArrayController.sortDescriptors) { [weak self] _, _ in
72 UserDefaults.standard[.powerupSupportSortDecriptors] = self?.shipController.sortDescriptors ?? []
76 private func customPredicate() -> NSPredicate? {
78 switch (shipTypePredicte(for: selectedShipType), omitPredicate) {
80 case let (s?, o?): return .and([o, s])
82 case let (s?, nil): return s
84 case let (nil, o?): return o
91 @IBAction func changeCategory(_ sender: AnyObject?) {
93 ShipTabType(rawValue: typeSegment.selectedSegment).map { selectedShipType = $0 }