// // GameStore.swift // Zockerhoehle // // Created by Julian-Steffen Müller on 02.08.19. // Copyright © 2019 Julian-Steffen Müller. All rights reserved. // import Foundation import SwiftUI import CoreData import Combine class GameStore : NSObject, ObservableObject, NSFetchedResultsControllerDelegate { var objectWillChange = PassthroughSubject() var consoleFilter : Console? var gameSeriesFilter : GameSeries? var sortDescriptors : [NSSortDescriptor] = [NSSortDescriptor(key: "name", ascending: true)] var fetchLimit : Int = 0 var games : [Game] { get { if self.fetchResultsController.fetchedObjects == nil { do { try fetchResultsController.performFetch() }catch { print("GameStore::games Perform Fetch not possible '\(error)'") } } let result = self.fetchResultsController.fetchedObjects ?? [] //Anscheinend ein Bug im FetchResultController das er das fetchLimit manchmal ignoriert if self.fetchLimit > 0 && result.count > self.fetchLimit { print("GameStore::games Fetch limit of ignored. Expected: \(self.fetchLimit) Delivered: \(result.count)") var clampedResult : [Game] = [] for index in 0.. = { var gamesFetch : NSFetchRequest = Game.fetchRequest() /*if let console = consoleFilter { gamesFetch = Game.fetchRequest(console: console) }else if let gameSeries = gameSeriesFilter { gamesFetch = Game.fetchRequest(gameSeries: gameSeries) }else { print("No filter: fetch Limit: \(self.fetchLimit)") }*/ gamesFetch.fetchLimit = self.fetchLimit gamesFetch.sortDescriptors = self.sortDescriptors let gamesFetchRC = NSFetchedResultsController(fetchRequest: gamesFetch, managedObjectContext: CDManager.shared.viewContext, sectionNameKeyPath: nil, cacheName: nil) gamesFetchRC.delegate = self return gamesFetchRC }() init(console : Console?, fetchLimit : Int = 0) { super.init() self.consoleFilter = console self.fetchLimit = fetchLimit } init(gameSeries: GameSeries?, fetchLimit : Int = 0) { super.init() self.gameSeriesFilter = gameSeries self.fetchLimit = fetchLimit } init(sortDescriptors : [NSSortDescriptor], fetchLimit : Int = 0) { super.init() self.sortDescriptors = sortDescriptors self.fetchLimit = fetchLimit } init(fetchLimit : Int = 0) { super.init() self.fetchLimit = fetchLimit } func controllerDidChangeContent(_ controller: NSFetchedResultsController) { self.objectWillChange.send() } }