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 {
24 shipController.filterPredicate = customPredicate()
25 shipController.rearrangeObjects()
29 override var nibName: NSNib.Name {
31 return .nibName(instanceOf: self)
34 var omitPredicate: NSPredicate? {
36 let sd = UserDefaults.standard
37 let predicates = [(Bool, NSPredicate)]()
38 .appended { (sd[.hideMaxKaryoku], .false(#keyPath(Ship.isMaxKaryoku))) }
39 .appended { (sd[.hideMaxRaisou], .false(#keyPath(Ship.isMaxRaisou))) }
40 .appended { (sd[.hideMaxTaiku], .false(#keyPath(Ship.isMaxTaiku))) }
41 .appended { (sd[.hideMaxSoukou], .false(#keyPath(Ship.isMaxSoukou))) }
42 .appended { (sd[.hideMaxLucky], .false(#keyPath(Ship.isMaxLucky))) }
43 .flatMap { (b, s) in b ? s : nil }
45 if predicates.isEmpty { return nil }
47 return .and(predicates)
50 override func viewDidLoad() {
58 try shipController.fetch(with: nil, merge: true)
62 fatalError("PowerUpSupportViewController: can not fetch. \(error)")
65 shipController.sortDescriptors = UserDefaults.standard[.powerupSupportSortDecriptors]
66 sortDescriptorsObservation = shipController.observe(\NSArrayController.sortDescriptors) { [weak self] _, _ in
68 UserDefaults.standard[.powerupSupportSortDecriptors] = self?.shipController.sortDescriptors ?? []
72 private func customPredicate() -> NSPredicate? {
74 switch (shipTypePredicte(for: selectedShipType), omitPredicate) {
76 case let (s?, o?): return .and([o, s])
77 case let (s?, nil): return s
78 case let (nil, o?): return o
83 @IBAction func changeCategory(_ sender: AnyObject?) {
85 ShipTabType(rawValue: typeSegment.selectedSegment).map { selectedShipType = $0 }