5 // Created by Hori,Masaki on 2017/01/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 fileprivate var DeckContext = 0
13 class Fleet: NSObject {
15 private let deckObserveKeys = [
16 "selection.ship_0", "selection.ship_1", "selection.ship_2",
17 "selection.ship_3", "selection.ship_4", "selection.ship_5",
23 print("Fleet number out of range")
27 deckController = NSObjectController()
30 deckController.entityName = "Deck"
31 deckController.managedObjectContext = ServerDataStore.default.managedObjectContext
32 deckController.fetchPredicate = NSPredicate(format: "id = %ld", number)
33 let req = NSFetchRequest<NSFetchRequestResult>()
34 req.entity = NSEntityDescription.entity(forEntityName: "Deck", in: deckController.managedObjectContext!)
35 req.predicate = deckController.fetchPredicate
37 try deckController.fetch(with: req, merge: false)
43 deck = deckController.content as? KCDeck
44 deckObserveKeys.forEach { deckController.addObserver(self, forKeyPath: $0, context: &DeckContext) }
47 deckObserveKeys.forEach { deckController.removeObserver(self, forKeyPath: $0) }
50 dynamic private(set) var ships: [KCShipObject] = []
51 private let deckController: NSObjectController
52 private weak var deck: KCDeck?
54 dynamic var name: String? { return deck?.name }
55 func keyPathsForValuesAffectingName() -> Set<String> {
58 dynamic var id: NSNumber? { return deck?.id as NSNumber? }
59 func keyPathesForValuesAffectiongId() -> Set<String> {
63 subscript(_ index: Int) -> KCShipObject? { return deck?[index] }
65 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
66 if context == &DeckContext {
67 ships = (0..<6).flatMap { return self[$0] }
70 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)