5 // Created by Hori,Masaki on 2017/01/22.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 private var pDeckContext = 0
13 final class Fleet: NSObject {
17 private let deckObserveKeys = [
18 "selection.ship_0", "selection.ship_1", "selection.ship_2",
19 "selection.ship_3", "selection.ship_4", "selection.ship_5"
24 guard case 1...4 = number
26 print("Fleet number out of range")
31 deckController = NSObjectController()
35 deckController.entityName = Deck.entityName
36 deckController.managedObjectContext = ServerDataStore.default.context
37 deckController.fetchPredicate = NSPredicate(format: "id = %ld", number)
38 let req = NSFetchRequest<NSFetchRequestResult>()
39 req.entity = NSEntityDescription.entity(forEntityName: Deck.entityName,
40 in: deckController.managedObjectContext!)
41 req.predicate = deckController.fetchPredicate
45 try deckController.fetch(with: req, merge: false)
54 deck = deckController.content as? Deck
55 deckObserveKeys.forEach { deckController.addObserver(self, forKeyPath: $0, context: &pDeckContext) }
60 deckObserveKeys.forEach { deckController.removeObserver(self, forKeyPath: $0) }
64 @objc dynamic private(set) var ships: [Ship] = []
65 private let deckController: NSObjectController
66 @objc weak var deck: Deck?
68 @objc dynamic var name: String? { return deck?.name }
69 @objc class func keyPathsForValuesAffectingName() -> Set<String> {
73 @objc dynamic var id: NSNumber? { return deck?.id as NSNumber? }
74 @objc class func keyPathesForValuesAffectiongId() -> Set<String> {
79 subscript(_ index: Int) -> Ship? { return deck?[index] }
81 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
83 if context == &pDeckContext {
85 ships = (0..<6).flatMap { return self[$0] }
90 super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)