diff --git a/Common/Collection View/GameCollectionViewDataSource.swift b/Common/Collection View/GameCollectionViewDataSource.swift index a078bbb..361bca3 100644 --- a/Common/Collection View/GameCollectionViewDataSource.swift +++ b/Common/Collection View/GameCollectionViewDataSource.swift @@ -52,7 +52,7 @@ class GameCollectionViewDataSource: NSObject { for identifier in identifiers { - let predicate = NSPredicate(format: "SUBQUERY(%K, $x, $x.%K == %@).@count > 0", GameAttributes.gameCollections.rawValue, GameCollectionAttributes.identifier.rawValue, identifier) + let predicate = NSPredicate(format: "SUBQUERY(%K, $x, $x.%K == %@).@count > 0", Game.Attributes.gameCollections.rawValue, GameCollection.Attributes.identifier.rawValue, identifier) predicates.append(predicate) } } @@ -62,9 +62,9 @@ class GameCollectionViewDataSource: NSObject fetchRequest.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates) } - fetchRequest.sortDescriptors = [NSSortDescriptor(key: GameAttributes.typeIdentifier.rawValue, ascending: true), NSSortDescriptor(key: GameAttributes.name.rawValue, ascending: true)] + fetchRequest.sortDescriptors = [NSSortDescriptor(key: Game.Attributes.typeIdentifier.rawValue, ascending: true), NSSortDescriptor(key: Game.Attributes.name.rawValue, ascending: true)] - self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.sharedManager.managedObjectContext, sectionNameKeyPath: GameAttributes.typeIdentifier.rawValue, cacheName: nil) + self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.sharedManager.managedObjectContext, sectionNameKeyPath: Game.Attributes.typeIdentifier.rawValue, cacheName: nil) self.fetchedResultsController.delegate = previousDelegate self.update() diff --git a/Common/Database/DatabaseManager.swift b/Common/Database/DatabaseManager.swift index 0920abc..d7249c6 100644 --- a/Common/Database/DatabaseManager.swift +++ b/Common/Database/DatabaseManager.swift @@ -321,7 +321,7 @@ private extension DatabaseManager } // Remove empty collections - let collections = GameCollection.instancesWithPredicate(NSPredicate(format: "%K.@count == 0", GameCollectionAttributes.games.rawValue), inManagedObjectContext: self.validationManagedObjectContext, type: GameCollection.self) + let collections = GameCollection.instancesWithPredicate(NSPredicate(format: "%K.@count == 0", GameCollection.Attributes.games.rawValue), inManagedObjectContext: self.validationManagedObjectContext, type: GameCollection.self) for collection in collections { diff --git a/Common/Database/Model/Game+CoreDataProperties.swift b/Common/Database/Model/Game+CoreDataProperties.swift deleted file mode 100644 index 6c0d51d..0000000 --- a/Common/Database/Model/Game+CoreDataProperties.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// Game+CoreDataProperties.swift -// Delta -// -// Created by Riley Testut on 10/4/15. -// Copyright © 2015 Riley Testut. All rights reserved. -// -// Choose "Create NSManagedObject Subclass…" from the Core Data editor menu -// to delete and recreate this implementation file for your updated model. -// - -import Foundation -import CoreData - -enum GameAttributes: String -{ - case artworkURL - case filename - case identifier - case name - case typeIdentifier - - case gameCollections -} - -extension Game -{ - @NSManaged var artworkURL: NSURL? - @NSManaged var filename: String - @NSManaged var identifier: String - @NSManaged var name: String - @NSManaged var typeIdentifier: String - - @NSManaged var gameCollections: Set -} diff --git a/Common/Database/Model/Game.swift b/Common/Database/Model/Game.swift index e12873d..f126187 100644 --- a/Common/Database/Model/Game.swift +++ b/Common/Database/Model/Game.swift @@ -14,9 +14,31 @@ import SNESDeltaCore public let kUTTypeGBAGame: CFStringRef = "com.rileytestut.delta.game.gba" +extension Game +{ + enum Attributes: String + { + case artworkURL + case filename + case identifier + case name + case typeIdentifier + + case gameCollections + } +} + @objc(Game) class Game: NSManagedObject, GameType { + @NSManaged var artworkURL: NSURL? + @NSManaged var filename: String + @NSManaged var identifier: String + @NSManaged var name: String + @NSManaged var typeIdentifier: String + + @NSManaged var gameCollections: Set + var fileURL: NSURL { let fileURL = DatabaseManager.gamesDirectoryURL.URLByAppendingPathComponent(self.filename) return fileURL diff --git a/Common/Database/Model/GameCollection+CoreDataProperties.swift b/Common/Database/Model/GameCollection+CoreDataProperties.swift deleted file mode 100644 index b27e39a..0000000 --- a/Common/Database/Model/GameCollection+CoreDataProperties.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// GameCollection+CoreDataProperties.swift -// Delta -// -// Created by Riley Testut on 11/1/15. -// Copyright © 2015 Riley Testut. All rights reserved. -// -// Choose "Create NSManagedObject Subclass…" from the Core Data editor menu -// to delete and recreate this implementation file for your updated model. -// - -import Foundation -import CoreData - -enum GameCollectionAttributes: String -{ - case identifier - case index - - case games -} - -extension GameCollection -{ - @NSManaged var identifier: String - @NSManaged var index: Int16 - - @NSManaged var games: Set -} diff --git a/Common/Database/Model/GameCollection.swift b/Common/Database/Model/GameCollection.swift index 19c1703..baaaca4 100644 --- a/Common/Database/Model/GameCollection.swift +++ b/Common/Database/Model/GameCollection.swift @@ -12,9 +12,25 @@ import CoreData import DeltaCore import SNESDeltaCore +extension GameCollection +{ + enum Attributes: String + { + case identifier + case index + + case games + } +} + @objc(GameCollection) class GameCollection: NSManagedObject { + @NSManaged private(set) var identifier: String + @NSManaged private(set) var index: Int16 + + @NSManaged var games: Set + var name: String { switch self.identifier @@ -59,7 +75,7 @@ class GameCollection: NSManagedObject index = Int16(INT16_MAX) } - let predicate = NSPredicate(format: "%K == %@", GameCollectionAttributes.identifier.rawValue, identifier) + let predicate = NSPredicate(format: "%K == %@", GameCollection.Attributes.identifier.rawValue, identifier) var gameCollection = GameCollection.instancesWithPredicate(predicate, inManagedObjectContext: managedObjectContext, type: GameCollection.self).first if gameCollection == nil diff --git a/Common/Database/Model/SaveState+CoreDataProperties.swift b/Common/Database/Model/SaveState+CoreDataProperties.swift deleted file mode 100644 index 633ceef..0000000 --- a/Common/Database/Model/SaveState+CoreDataProperties.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SaveState+CoreDataProperties.swift -// Delta -// -// Created by Riley Testut on 1/31/16. -// Copyright © 2016 Riley Testut. All rights reserved. -// -// Choose "Create NSManagedObject Subclass…" from the Core Data editor menu -// to delete and recreate this implementation file for your updated model. -// - -import Foundation -import CoreData - -enum SaveStateAttributes: String -{ - case filename - case identifier - case name - case creationDate - case modifiedDate - - case game -} - -extension SaveState -{ - @NSManaged var filename: String - @NSManaged var identifier: String - @NSManaged var name: String? - @NSManaged var creationDate: NSDate - @NSManaged var modifiedDate: NSDate - - // Must be optional relationship to satisfy weird Core Data requirement - // https://forums.developer.apple.com/thread/20535 - @NSManaged var game: Game! -} diff --git a/Common/Database/Model/SaveState.swift b/Common/Database/Model/SaveState.swift index 01f71f4..6f324bd 100644 --- a/Common/Database/Model/SaveState.swift +++ b/Common/Database/Model/SaveState.swift @@ -11,9 +11,34 @@ import CoreData import DeltaCore +extension SaveState +{ + enum Attributes: String + { + case filename + case identifier + case name + case creationDate + case modifiedDate + + case game + } +} + @objc(SaveState) class SaveState: NSManagedObject, SaveStateType { + @NSManaged var name: String? + @NSManaged var modifiedDate: NSDate + + @NSManaged private(set) var filename: String + @NSManaged private(set) var identifier: String + @NSManaged private(set) var creationDate: NSDate + + // Must be optional relationship to satisfy weird Core Data requirement + // https://forums.developer.apple.com/thread/20535 + @NSManaged var game: Game! + var fileURL: NSURL { let fileURL = DatabaseManager.saveStatesDirectoryURLForGame(self.game).URLByAppendingPathComponent(self.filename) return fileURL @@ -25,3 +50,24 @@ class SaveState: NSManagedObject, SaveStateType return imageFileURL } } + +extension SaveState +{ + @NSManaged private var primitiveFilename: String + @NSManaged private var primitiveIdentifier: String + @NSManaged private var primitiveCreationDate: NSDate + @NSManaged private var primitiveModifiedDate: NSDate + + override func awakeFromInsert() + { + super.awakeFromInsert() + + let identifier = NSUUID().UUIDString + let date = NSDate() + + self.primitiveIdentifier = identifier + self.primitiveFilename = identifier + self.primitiveCreationDate = date + self.primitiveModifiedDate = date + } +} \ No newline at end of file diff --git a/Common/Importing/GamePickerController.swift b/Common/Importing/GamePickerController.swift index 004a603..08ed4ed 100644 --- a/Common/Importing/GamePickerController.swift +++ b/Common/Importing/GamePickerController.swift @@ -91,7 +91,7 @@ class GamePickerController: NSObject DatabaseManager.sharedManager.managedObjectContext.performBlock() { - let predicate = NSPredicate(format: "%K IN (%@)", GameAttributes.identifier.rawValue, identifiers) + let predicate = NSPredicate(format: "%K IN (%@)", Game.Attributes.identifier.rawValue, identifiers) let games = Game.instancesWithPredicate(predicate, inManagedObjectContext: DatabaseManager.sharedManager.managedObjectContext, type: Game.self) self.delegate?.gamePickerController(self, didImportGames: games) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index a220e93..70c4706 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -13,8 +13,6 @@ BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF107EC31BF413F000E0C32C /* GamesViewController.swift */; }; BF172AEB1C68986300C26774 /* NSManagedObjectContext+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF172AEA1C68986300C26774 /* NSManagedObjectContext+Conveniences.swift */; }; BF172AEC1C68986300C26774 /* NSManagedObjectContext+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF172AEA1C68986300C26774 /* NSManagedObjectContext+Conveniences.swift */; }; - BF1FB1841C5EE643007E2494 /* SaveState+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1FB1821C5EE643007E2494 /* SaveState+CoreDataProperties.swift */; }; - BF1FB1851C5EE643007E2494 /* SaveState+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1FB1821C5EE643007E2494 /* SaveState+CoreDataProperties.swift */; }; BF1FB1861C5EE643007E2494 /* SaveState.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1FB1831C5EE643007E2494 /* SaveState.swift */; }; BF1FB1871C5EE643007E2494 /* SaveState.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1FB1831C5EE643007E2494 /* SaveState.swift */; }; BF27CC8B1BC9FE4D00A20D89 /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF27CC8A1BC9FE4D00A20D89 /* Pods.framework */; }; @@ -75,13 +73,9 @@ BFB141191BE46934004FBF46 /* GameCollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB141171BE46934004FBF46 /* GameCollectionViewDataSource.swift */; }; BFC134E11AAD82460087AD7B /* SNESDeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */; }; BFC134E21AAD82470087AD7B /* SNESDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BFC273181BE6152200D22B05 /* GameCollection+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC273161BE6152200D22B05 /* GameCollection+CoreDataProperties.swift */; }; - BFC273191BE6152200D22B05 /* GameCollection+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC273161BE6152200D22B05 /* GameCollection+CoreDataProperties.swift */; }; BFC2731A1BE6152200D22B05 /* GameCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC273171BE6152200D22B05 /* GameCollection.swift */; }; BFC2731B1BE6152200D22B05 /* GameCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC273171BE6152200D22B05 /* GameCollection.swift */; }; BFDB28451BC9DA7B001D0C83 /* GamePickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDB28441BC9DA7B001D0C83 /* GamePickerController.swift */; }; - BFDE393A1BC0CEDF003F72E8 /* Game+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDE39381BC0CEDF003F72E8 /* Game+CoreDataProperties.swift */; }; - BFDE393B1BC0CEDF003F72E8 /* Game+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDE39381BC0CEDF003F72E8 /* Game+CoreDataProperties.swift */; }; BFDE393C1BC0CEDF003F72E8 /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDE39391BC0CEDF003F72E8 /* Game.swift */; }; BFDE393D1BC0CEDF003F72E8 /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDE39391BC0CEDF003F72E8 /* Game.swift */; }; BFEC732D1AAECC4A00650035 /* Roxas.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFEC732C1AAECC4A00650035 /* Roxas.framework */; }; @@ -136,7 +130,6 @@ BF0CDDAC1C8155D200640168 /* LoadImageOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadImageOperation.swift; path = Components/LoadImageOperation.swift; sourceTree = ""; }; BF107EC31BF413F000E0C32C /* GamesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesViewController.swift; sourceTree = ""; }; BF172AEA1C68986300C26774 /* NSManagedObjectContext+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Conveniences.swift"; sourceTree = ""; }; - BF1FB1821C5EE643007E2494 /* SaveState+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SaveState+CoreDataProperties.swift"; sourceTree = ""; }; BF1FB1831C5EE643007E2494 /* SaveState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveState.swift; sourceTree = ""; }; BF27CC861BC9E3C600A20D89 /* Delta.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Delta.entitlements; sourceTree = ""; }; BF27CC8A1BC9FE4D00A20D89 /* Pods.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pods.framework; path = "Pods/../build/Debug-appletvos/Pods.framework"; sourceTree = ""; }; @@ -173,10 +166,8 @@ BFAA1FF31B8AD7F900495943 /* ControllersSettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ControllersSettingsViewController.swift; sourceTree = ""; }; BFB141171BE46934004FBF46 /* GameCollectionViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GameCollectionViewDataSource.swift; path = "Collection View/GameCollectionViewDataSource.swift"; sourceTree = ""; }; BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SNESDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFC273161BE6152200D22B05 /* GameCollection+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "GameCollection+CoreDataProperties.swift"; sourceTree = ""; }; BFC273171BE6152200D22B05 /* GameCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameCollection.swift; sourceTree = ""; }; BFDB28441BC9DA7B001D0C83 /* GamePickerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamePickerController.swift; sourceTree = ""; }; - BFDE39381BC0CEDF003F72E8 /* Game+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Game+CoreDataProperties.swift"; sourceTree = ""; }; BFDE39391BC0CEDF003F72E8 /* Game.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Game.swift; sourceTree = ""; }; BFEC732C1AAECC4A00650035 /* Roxas.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Roxas.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFF1E5631BE04CAF000E9EF6 /* BoxArtImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BoxArtImageView.swift; path = Components/BoxArtImageView.swift; sourceTree = ""; }; @@ -281,11 +272,8 @@ children = ( BF4566E61BC090B6007BFA1A /* Model.xcdatamodeld */, BFDE39391BC0CEDF003F72E8 /* Game.swift */, - BFDE39381BC0CEDF003F72E8 /* Game+CoreDataProperties.swift */, BFC273171BE6152200D22B05 /* GameCollection.swift */, - BFC273161BE6152200D22B05 /* GameCollection+CoreDataProperties.swift */, BF1FB1831C5EE643007E2494 /* SaveState.swift */, - BF1FB1821C5EE643007E2494 /* SaveState+CoreDataProperties.swift */, ); path = Model; sourceTree = ""; @@ -685,17 +673,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BFC273191BE6152200D22B05 /* GameCollection+CoreDataProperties.swift in Sources */, BF6BB2411BB73FE800CCF94A /* GameSelectionViewController.swift in Sources */, BF27CC8F1BCA010200A20D89 /* GamePickerController.swift in Sources */, BF172AEC1C68986300C26774 /* NSManagedObjectContext+Conveniences.swift in Sources */, BF7AE81F1C2E984300B1B5BC /* GridCollectionViewCell.swift in Sources */, - BF1FB1851C5EE643007E2494 /* SaveState+CoreDataProperties.swift in Sources */, BF7AE8251C2E984300B1B5BC /* GridCollectionViewLayout.swift in Sources */, BFDE393D1BC0CEDF003F72E8 /* Game.swift in Sources */, BFC2731B1BE6152200D22B05 /* GameCollection.swift in Sources */, BF762E9F1BC19D31002C8866 /* DatabaseManager.swift in Sources */, - BFDE393B1BC0CEDF003F72E8 /* Game+CoreDataProperties.swift in Sources */, BF27CC911BCB156200A20D89 /* EmulationViewController.swift in Sources */, BFB141191BE46934004FBF46 /* GameCollectionViewDataSource.swift in Sources */, BF1FB1871C5EE643007E2494 /* SaveState.swift in Sources */, @@ -719,7 +704,6 @@ BF7AE8241C2E984300B1B5BC /* GridCollectionViewLayout.swift in Sources */, BF1FB1861C5EE643007E2494 /* SaveState.swift in Sources */, BFB141181BE46934004FBF46 /* GameCollectionViewDataSource.swift in Sources */, - BF1FB1841C5EE643007E2494 /* SaveState+CoreDataProperties.swift in Sources */, BFFB709F1AF99B1700DE56FE /* EmulationViewController.swift in Sources */, BFAA1FF41B8AD7F900495943 /* ControllersSettingsViewController.swift in Sources */, BF353FF91C5D870B00C1184C /* PauseItem.swift in Sources */, @@ -728,7 +712,6 @@ BF7AE81E1C2E984300B1B5BC /* GridCollectionViewCell.swift in Sources */, BF4566E81BC090B6007BFA1A /* Model.xcdatamodeld in Sources */, BFDE393C1BC0CEDF003F72E8 /* Game.swift in Sources */, - BFC273181BE6152200D22B05 /* GameCollection+CoreDataProperties.swift in Sources */, BFC2731A1BE6152200D22B05 /* GameCollection.swift in Sources */, BFF1E5641BE04CAF000E9EF6 /* BoxArtImageView.swift in Sources */, BF762EAB1BC1B076002C8866 /* NSManagedObject+Conveniences.swift in Sources */, @@ -744,7 +727,6 @@ BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */, BF353FF21C5D7FB000C1184C /* PauseViewController.swift in Sources */, BFDB28451BC9DA7B001D0C83 /* GamePickerController.swift in Sources */, - BFDE393A1BC0CEDF003F72E8 /* Game+CoreDataProperties.swift in Sources */, BF7AE8081C2E858400B1B5BC /* PauseMenuViewController.swift in Sources */, BF3540051C5DA70400C1184C /* SaveStatesViewController.swift in Sources */, ); diff --git a/Delta/Emulation/EmulationViewController.swift b/Delta/Emulation/EmulationViewController.swift index 819f3ce..9609ac8 100644 --- a/Delta/Emulation/EmulationViewController.swift +++ b/Delta/Emulation/EmulationViewController.swift @@ -261,6 +261,8 @@ extension EmulationViewController: SaveStatesViewControllerDelegate let image = UIImage(CGImage: quartzImage) UIImagePNGRepresentation(image)?.writeToURL(saveState.imageFileURL, atomically: true) } + + saveState.modifiedDate = NSDate() } func saveStatesViewController(saveStatesViewController: SaveStatesViewController, loadSaveState saveState: SaveState) diff --git a/Delta/Game Selection/GamesViewController.swift b/Delta/Game Selection/GamesViewController.swift index 7600a21..b86bb8a 100644 --- a/Delta/Game Selection/GamesViewController.swift +++ b/Delta/Game Selection/GamesViewController.swift @@ -28,7 +28,7 @@ class GamesViewController: UIViewController required init?(coder aDecoder: NSCoder) { let fetchRequest = GameCollection.fetchRequest() - fetchRequest.sortDescriptors = [NSSortDescriptor(key: GameCollectionAttributes.index.rawValue, ascending: true)] + fetchRequest.sortDescriptors = [NSSortDescriptor(key: GameCollection.Attributes.index.rawValue, ascending: true)] self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.sharedManager.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index 36d505e..4fffa9d 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -139,8 +139,8 @@ private extension SaveStatesViewController let fetchRequest = SaveState.fetchRequest() fetchRequest.returnsObjectsAsFaults = false - fetchRequest.predicate = NSPredicate(format: "%K == %@", SaveStateAttributes.game.rawValue, game) - fetchRequest.sortDescriptors = [NSSortDescriptor(key: SaveStateAttributes.creationDate.rawValue, ascending: true)] + fetchRequest.predicate = NSPredicate(format: "%K == %@", SaveState.Attributes.game.rawValue, game) + fetchRequest.sortDescriptors = [NSSortDescriptor(key: SaveState.Attributes.creationDate.rawValue, ascending: true)] self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.sharedManager.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) self.fetchedResultsController.delegate = self @@ -222,17 +222,10 @@ private extension SaveStatesViewController let backgroundContext = DatabaseManager.sharedManager.backgroundManagedObjectContext() backgroundContext.performBlock { - let identifier = NSUUID().UUIDString - let date = NSDate() - var game = self.delegate.saveStatesViewControllerActiveGame(self) game = backgroundContext.objectWithID(game.objectID) as! Game let saveState = SaveState.insertIntoManagedObjectContext(backgroundContext) - saveState.identifier = identifier - saveState.filename = identifier - saveState.creationDate = date - saveState.modifiedDate = date saveState.game = game self.updateSaveState(saveState)