diff --git a/Common/Database/Model/Game.swift b/Common/Database/Model/Game.swift index f126187..7946c8c 100644 --- a/Common/Database/Model/Game.swift +++ b/Common/Database/Model/Game.swift @@ -25,6 +25,7 @@ extension Game case typeIdentifier case gameCollections + case previewSaveState } } @@ -38,6 +39,7 @@ class Game: NSManagedObject, GameType @NSManaged var typeIdentifier: String @NSManaged var gameCollections: Set + @NSManaged var previewSaveState: SaveState? var fileURL: NSURL { let fileURL = DatabaseManager.gamesDirectoryURL.URLByAppendingPathComponent(self.filename) diff --git a/Common/Database/Model/Model.xcdatamodeld/Model.xcdatamodel/contents b/Common/Database/Model/Model.xcdatamodeld/Model.xcdatamodel/contents index 3c28812..26a7b76 100644 --- a/Common/Database/Model/Model.xcdatamodeld/Model.xcdatamodel/contents +++ b/Common/Database/Model/Model.xcdatamodeld/Model.xcdatamodel/contents @@ -15,6 +15,7 @@ + @@ -40,11 +41,11 @@ - + @@ -52,7 +53,7 @@ - + diff --git a/Common/Database/Model/SaveState.swift b/Common/Database/Model/SaveState.swift index 35b40da..eb81808 100644 --- a/Common/Database/Model/SaveState.swift +++ b/Common/Database/Model/SaveState.swift @@ -17,13 +17,13 @@ extension SaveState { case filename case identifier - case isPreview case name case creationDate case modifiedDate case type case game + case previewGame } @objc enum Type: Int16 @@ -40,7 +40,6 @@ class SaveState: NSManagedObject, SaveStateType @NSManaged var name: String? @NSManaged var modifiedDate: NSDate @NSManaged var type: Type - @NSManaged var isPreview: Bool @NSManaged private(set) var filename: String @NSManaged private(set) var identifier: String @@ -50,6 +49,8 @@ class SaveState: NSManagedObject, SaveStateType // https://forums.developer.apple.com/thread/20535 @NSManaged var game: Game! + @NSManaged var previewGame: Game? + var fileURL: NSURL { let fileURL = DatabaseManager.saveStatesDirectoryURLForGame(self.game).URLByAppendingPathComponent(self.filename) return fileURL diff --git a/Delta/Game Selection/GamesViewController.swift b/Delta/Game Selection/GamesViewController.swift index ed19235..2b0fe30 100644 --- a/Delta/Game Selection/GamesViewController.swift +++ b/Delta/Game Selection/GamesViewController.swift @@ -129,10 +129,8 @@ class GamesViewController: UIViewController if segue.identifier == "peekEmulationViewController" { destinationViewController.deferredPreparationHandler = { [unowned destinationViewController] in - - let predicate = NSPredicate(format: "%K == %@ AND %K == YES", SaveState.Attributes.game.rawValue, game, SaveState.Attributes.isPreview.rawValue) - - if let saveState = SaveState.instancesWithPredicate(predicate, inManagedObjectContext: DatabaseManager.sharedManager.managedObjectContext, type: SaveState.self).first + + if let saveState = game.previewSaveState { destinationViewController.emulatorCore.startEmulation() destinationViewController.emulatorCore.pauseEmulation() diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index 622056f..468efff 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -358,15 +358,14 @@ private extension SaveStatesViewController var game = self.delegate.saveStatesViewControllerActiveEmulatorCore(self).game as! Game game = backgroundContext.objectWithID(game.objectID) as! Game - let predicate = NSPredicate(format: "%K == %@ AND %K == YES", SaveState.Attributes.game.rawValue, game, SaveState.Attributes.isPreview.rawValue) - - let previousPreviewSaveState = SaveState.instancesWithPredicate(predicate, inManagedObjectContext: backgroundContext, type: SaveState.self).first - previousPreviewSaveState?.isPreview = false - if let saveState = saveState { let previewSaveState = backgroundContext.objectWithID(saveState.objectID) as! SaveState - previewSaveState.isPreview = true + game.previewSaveState = previewSaveState + } + else + { + game.previewSaveState = nil } backgroundContext.saveWithErrorLogging() @@ -465,7 +464,7 @@ private extension SaveStatesViewController if self.traitCollection.forceTouchCapability == .Available { - if !saveState.isPreview + if saveState.game.previewSaveState != saveState { let previewAction = Action(title: NSLocalizedString("Set as Preview Save State", comment: ""), style: .Default, action: { action in self.updatePreviewSaveState(saveState)