5 // Created by Hori,Masaki on 2017/01/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class FleetManager: NSObject {
20 @objc private(set) var fleets: [Fleet] = []
21 private var fleetController: NSArrayController!
23 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
25 if keyPath == "arrangedObjects.ships" {
27 setNewFleetNumberToShip()
32 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
35 private func setupFleetController() {
37 fleetController = NSArrayController(content: fleets)
38 fleetController.addObserver(self, forKeyPath: "arrangedObjects.ships", context: nil)
41 private func setupFleets() {
43 fleets = (1...4).compactMap { Fleet(number: $0) }
45 guard fleets.count == 4 else {
47 Logger.shared.log("Can not create Fleet")
52 if fleets[0].ships.isEmpty {
54 NotificationCenter.default
55 .addObserverOnce(forName: .PortAPIReceived, object: nil, queue: nil) { _ in
57 DispatchQueue.main.async(execute: self.setupFleetController)
58 DispatchQueue.main.async(execute: self.setNewFleetNumberToShip)
63 setupFleetController()
67 private func setNewFleetNumberToShip() {
69 let store = ServerDataStore.oneTimeEditor()
73 store.shipsInFleet().forEach { $0.fleet = 0 as NSNumber }
76 self.fleets.enumerated().forEach { index, fleet in
78 fleet.ships.forEach { ship in
80 store.ship(by: ship.id)?.fleet = (index + 1) as NSNumber