Automatically saves to disk when saving managed object context
This commit is contained in:
parent
3dcf6b9df0
commit
4a2b5cd1dd
@ -66,6 +66,7 @@ class DatabaseManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
private let privateManagedObjectContext: NSManagedObjectContext
|
private let privateManagedObjectContext: NSManagedObjectContext
|
||||||
|
private let validationManagedObjectContext: NSManagedObjectContext
|
||||||
|
|
||||||
// MARK: - Initialization -
|
// MARK: - Initialization -
|
||||||
/// Initialization
|
/// Initialization
|
||||||
@ -83,6 +84,12 @@ class DatabaseManager
|
|||||||
self.managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
|
self.managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
|
||||||
self.managedObjectContext.parentContext = self.privateManagedObjectContext
|
self.managedObjectContext.parentContext = self.privateManagedObjectContext
|
||||||
self.managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
|
self.managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
|
||||||
|
|
||||||
|
self.validationManagedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
|
||||||
|
self.validationManagedObjectContext.parentContext = self.managedObjectContext
|
||||||
|
self.validationManagedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
|
||||||
|
|
||||||
|
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("managedObjectContextDidSave:"), name: NSManagedObjectContextDidSaveNotification, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func startWithCompletion(completionBlock: ((performingMigration: Bool) -> Void)?)
|
func startWithCompletion(completionBlock: ((performingMigration: Bool) -> Void)?)
|
||||||
@ -126,42 +133,6 @@ class DatabaseManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Saving -
|
|
||||||
/// Saving
|
|
||||||
|
|
||||||
func save()
|
|
||||||
{
|
|
||||||
let backgroundTaskIdentifier = RSTBeginBackgroundTask("Save Database Task")
|
|
||||||
|
|
||||||
self.managedObjectContext.performBlockAndWait() {
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
try self.managedObjectContext.save()
|
|
||||||
}
|
|
||||||
catch let error as NSError
|
|
||||||
{
|
|
||||||
print("Failed to save main context:", error)
|
|
||||||
}
|
|
||||||
|
|
||||||
self.privateManagedObjectContext.performBlock() {
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
try self.privateManagedObjectContext.save()
|
|
||||||
}
|
|
||||||
catch let error as NSError
|
|
||||||
{
|
|
||||||
print("Failed to save private context to disk:", error)
|
|
||||||
}
|
|
||||||
|
|
||||||
RSTEndBackgroundTask(backgroundTaskIdentifier)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Importing -
|
// MARK: - Importing -
|
||||||
/// Importing
|
/// Importing
|
||||||
|
|
||||||
@ -231,16 +202,80 @@ class DatabaseManager
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: - Background Contexts -
|
// MARK: - Background Contexts -
|
||||||
/// Background Contexts
|
/// Background Contexts
|
||||||
|
|
||||||
func backgroundManagedObjectContext() -> NSManagedObjectContext
|
func backgroundManagedObjectContext() -> NSManagedObjectContext
|
||||||
{
|
{
|
||||||
let managedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
|
let managedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
|
||||||
managedObjectContext.parentContext = self.managedObjectContext
|
managedObjectContext.parentContext = self.validationManagedObjectContext
|
||||||
managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
|
managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
|
||||||
|
|
||||||
return managedObjectContext
|
return managedObjectContext
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private extension DatabaseManager
|
||||||
|
{
|
||||||
|
// MARK: - Saving -
|
||||||
|
|
||||||
|
private func save()
|
||||||
|
{
|
||||||
|
let backgroundTaskIdentifier = RSTBeginBackgroundTask("Save Database Task")
|
||||||
|
|
||||||
|
self.validationManagedObjectContext.performBlockAndWait {
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
try self.validationManagedObjectContext.save()
|
||||||
|
}
|
||||||
|
catch let error as NSError
|
||||||
|
{
|
||||||
|
print("Failed to save validation context:", error)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Update main managed object context
|
||||||
|
self.managedObjectContext.performBlockAndWait() {
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
try self.managedObjectContext.save()
|
||||||
|
}
|
||||||
|
catch let error as NSError
|
||||||
|
{
|
||||||
|
print("Failed to save main context:", error)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Save to disk
|
||||||
|
self.privateManagedObjectContext.performBlock() {
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
try self.privateManagedObjectContext.save()
|
||||||
|
}
|
||||||
|
catch let error as NSError
|
||||||
|
{
|
||||||
|
print("Failed to save private context to disk:", error)
|
||||||
|
}
|
||||||
|
|
||||||
|
RSTEndBackgroundTask(backgroundTaskIdentifier)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Notifications -
|
||||||
|
|
||||||
|
dynamic func managedObjectContextDidSave(notification: NSNotification)
|
||||||
|
{
|
||||||
|
guard let managedObjectContext = notification.object as? NSManagedObjectContext where managedObjectContext.parentContext == self.validationManagedObjectContext else { return }
|
||||||
|
|
||||||
|
self.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -77,7 +77,6 @@ extension GamesViewController: GamePickerControllerDelegate
|
|||||||
{
|
{
|
||||||
func gamePickerController(gamePickerController: GamePickerController, didImportGames games: [Game])
|
func gamePickerController(gamePickerController: GamePickerController, didImportGames games: [Game])
|
||||||
{
|
{
|
||||||
DatabaseManager.sharedManager.save()
|
|
||||||
print(games)
|
print(games)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -88,7 +88,6 @@ extension GameSelectionViewController: GamePickerControllerDelegate
|
|||||||
{
|
{
|
||||||
func gamePickerController(gamePickerController: GamePickerController, didImportGames games: [Game])
|
func gamePickerController(gamePickerController: GamePickerController, didImportGames games: [Game])
|
||||||
{
|
{
|
||||||
DatabaseManager.sharedManager.save()
|
|
||||||
print(games)
|
print(games)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user