@objc let managedObjectContext = ServerDataStore.default.context
- deinit {
-
- shipController.removeObserver(self, forKeyPath: NSBindingName.sortDescriptors.rawValue)
- }
+ @IBOutlet private var shipController: NSArrayController!
+ @IBOutlet private weak var typeSegment: NSSegmentedControl!
- @IBOutlet var shipController: NSArrayController!
- @IBOutlet weak var typeSegment: NSSegmentedControl!
+ private var sortDescriptorsObservation: NSKeyValueObservation?
override var hasShipTypeSelector: Bool { return true }
override var selectedShipType: ShipTabType {
didSet {
+
shipController.filterPredicate = customPredicate()
shipController.rearrangeObjects()
}
var omitPredicate: NSPredicate? {
let sd = UserDefaults.standard
- let hideKyes = [(Bool, String)]()
- .appended { (sd[.hideMaxKaryoku], "isMaxKaryoku != TRUE") }
- .appended { (sd[.hideMaxRaisou], "isMaxRaisou != TRUE") }
- .appended { (sd[.hideMaxTaiku], "isMaxTaiku != TRUE") }
- .appended { (sd[.hideMaxSoukou], "isMaxSoukou != TRUE") }
- .appended { (sd[.hideMaxLucky], "isMaxLucky != TRUE") }
- .flatMap { (b, s) in b ? s : nil }
+ let predicates = [(Bool, NSPredicate)]()
+ .appended { (sd[.hideMaxKaryoku], .false(#keyPath(Ship.isMaxKaryoku))) }
+ .appended { (sd[.hideMaxRaisou], .false(#keyPath(Ship.isMaxRaisou))) }
+ .appended { (sd[.hideMaxTaiku], .false(#keyPath(Ship.isMaxTaiku))) }
+ .appended { (sd[.hideMaxSoukou], .false(#keyPath(Ship.isMaxSoukou))) }
+ .appended { (sd[.hideMaxLucky], .false(#keyPath(Ship.isMaxLucky))) }
+ .compactMap { (b, s) in b ? s : nil }
- if hideKyes.isEmpty { return nil }
+ if predicates.isEmpty {
+
+ return nil
+ }
- return NSPredicate(format: hideKyes.joined(separator: " AND "))
+ return .and(predicates)
}
override func viewDidLoad() {
} catch {
fatalError("PowerUpSupportViewController: can not fetch. \(error)")
-
}
shipController.sortDescriptors = UserDefaults.standard[.powerupSupportSortDecriptors]
- shipController.addObserver(self, forKeyPath: NSBindingName.sortDescriptors.rawValue, context: nil)
- }
-
- override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
-
- if keyPath == NSBindingName.sortDescriptors.rawValue {
-
- UserDefaults.standard[.powerupSupportSortDecriptors] = shipController.sortDescriptors
+ sortDescriptorsObservation = shipController.observe(\NSArrayController.sortDescriptors) { [weak self] _, _ in
- return
+ UserDefaults.standard[.powerupSupportSortDecriptors] = self?.shipController.sortDescriptors ?? []
}
-
- super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
private func customPredicate() -> NSPredicate? {
- switch (shipTypePredicte, omitPredicate) {
+ switch (shipTypePredicte(for: selectedShipType), omitPredicate) {
+
+ case let (s?, o?): return .and([o, s])
- case let (s?, o?): return NSCompoundPredicate(type: .and, subpredicates: [o, s])
case let (s?, nil): return s
+
case let (nil, o?): return o
+
default: return nil
+
}
}