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 let managedObjectContext = ServerDataStore.default.context
17 shipController.removeObserver(self, forKeyPath: NSSortDescriptorsBinding)
20 @IBOutlet var shipController: NSArrayController!
21 @IBOutlet weak var typeSegment: NSSegmentedControl!
23 override var hasShipTypeSelector: Bool { return true }
24 override var selectedShipType: ShipType {
27 shipController.filterPredicate = customPredicate()
28 shipController.rearrangeObjects()
32 override var nibName: String! {
34 return "PowerUpSupportViewController"
37 var omitPredicate: NSPredicate? {
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 }
48 if hideKyes.isEmpty { return nil }
50 return NSPredicate(format: hideKyes.joined(separator: " AND "))
53 override func viewDidLoad() {
61 try shipController.fetch(with: nil, merge: true)
65 fatalError("PowerUpSupportViewController: can not fetch. \(error)")
69 shipController.sortDescriptors = UserDefaults.standard.powerupSupportSortDecriptors
70 shipController.addObserver(self, forKeyPath: NSSortDescriptorsBinding, context: nil)
73 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
75 if keyPath == NSSortDescriptorsBinding {
77 UserDefaults.standard.powerupSupportSortDecriptors = shipController.sortDescriptors
82 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
85 fileprivate func customPredicate() -> NSPredicate? {
87 switch (shipTypePredicte, omitPredicate) {
88 case let (s?, o?): return NSCompoundPredicate(type: .and, subpredicates: [o, s])
89 case let (s?, nil): return s
90 case let (nil, o?): return o
95 @IBAction func changeCategory(_ sender: AnyObject?) {
97 ShipType(rawValue: typeSegment.selectedSegment).map { selectedShipType = $0 }