import Cocoa
-fileprivate var pDeckContext = 0
+private var pDeckContext = 0
final class Fleet: NSObject {
let fleetNumber: Int
+ private let deckController = NSObjectController()
private let deckObserveKeys = [
"selection.ship_0", "selection.ship_1", "selection.ship_2",
init?(number: Int) {
- guard case 1...4 = number
- else {
- print("Fleet number out of range")
- return nil
+ guard case 1...4 = number else {
+
+ Logger.shared.log("Fleet number out of range")
+ return nil
}
fleetNumber = number
- deckController = NSObjectController()
super.init()
deckController.entityName = Deck.entityName
deckController.managedObjectContext = ServerDataStore.default.context
- deckController.fetchPredicate = NSPredicate(format: "id = %ld", number)
+ deckController.fetchPredicate = NSPredicate(#keyPath(Deck.id), equal: number)
let req = NSFetchRequest<NSFetchRequestResult>()
req.entity = NSEntityDescription.entity(forEntityName: Deck.entityName,
in: deckController.managedObjectContext!)
} catch {
- print("Fetch error")
+ Logger.shared.log("Fetch error")
return nil
-
}
deck = deckController.content as? Deck
deinit {
deckObserveKeys.forEach { deckController.removeObserver(self, forKeyPath: $0) }
-
}
- dynamic private(set) var ships: [Ship] = []
- private let deckController: NSObjectController
- private weak var deck: Deck?
-
- dynamic var name: String? { return deck?.name }
- class func keyPathsForValuesAffectingName() -> Set<String> {
-
- return ["deck.name"]
- }
- dynamic var id: NSNumber? { return deck?.id as NSNumber? }
- class func keyPathesForValuesAffectiongId() -> Set<String> {
+ @objc override class func keyPathsForValuesAffectingValue(forKey key: String) -> Set<String> {
- return ["deck.id"]
+ switch key {
+
+ case #keyPath(name): return [#keyPath(deck.name)]
+
+ case #keyPath(id): return [#keyPath(deck.id)]
+
+ default: return []
+ }
}
+ @objc dynamic private(set) var ships: [Ship] = []
+ @objc var deck: Deck?
+
+ @objc dynamic var name: String? { return deck?.name }
+ @objc dynamic var id: NSNumber? { return deck?.id as NSNumber? }
+
subscript(_ index: Int) -> Ship? { return deck?[index] }
- override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
+ override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
if context == &pDeckContext {
- ships = (0..<6).flatMap { return self[$0] }
+ ships = (0..<6).flatMap { self[$0] }
return
}