annotate GeoQuiz/Logic/PersistenceController.swift @ 21:b145c408f791

refactor code
author Dennis C. M. <dennis@denniscm.com>
date Tue, 25 Oct 2022 15:30:01 +0200
parents e281791e0494
children 56add5561261
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // PersistenceController.swift
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 19/10/22.
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import CoreData
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
9 import SwiftUI
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
11 class PersistenceController {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
12 static let shared = PersistenceController()
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
14 let container: NSPersistentCloudKitContainer
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
15
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16 static var preview: PersistenceController = {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
17 let result = PersistenceController(inMemory: true)
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
18 let viewContext = result.container.viewContext
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
19 createMockData(nil, viewContext)
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
20
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21 return result
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22 }()
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
23
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
24 init(inMemory: Bool = false) {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
25 container = NSPersistentCloudKitContainer(name: "GeoQuiz")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
26
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
27 if inMemory {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
28 container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
29 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
30
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
31 container.loadPersistentStores(completionHandler: { (storeDescription, error) in
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
32 if let error = error as NSError? {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
33 fatalError("Unresolved error \(error), \(error.userInfo)")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
34 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
35 })
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
36
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
37 container.viewContext.automaticallyMergesChangesFromParent = true
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
38 }
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
39
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
40 #if DEBUG
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
41 static func createMockData(_ playedGames: FetchedResults<PlayedGame>?, _ moc: NSManagedObjectContext) {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
42 for _ in 0..<10 {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
43 let playedGame = PlayedGame(context: moc)
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
44
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
45 playedGame.type = GameType(rawValue: Int16.random(in: 0...3))!
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
46 playedGame.score = Int32.random(in: 0...50)
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
47 playedGame.date = Date()
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
48
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
49 if playedGame.type == .guessTheFlag || playedGame.type == .guessTheCapital {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
50 playedGame.correctAnswers = ["Bangladesh", "Belgium", "Burkina Faso", "Bermuda", "Jamaica"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
51 playedGame.wrongAnswers = ["Belarus", "Russia"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
52 } else {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
53 playedGame.correctAnswers = ["Herat", "Lobito", "Darregueira", "San Juan"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
54 playedGame.wrongAnswers = ["San Luis", "Oranjestad"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
55 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
56 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
57 do {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
58 try moc.save()
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
59 } catch {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
60 let nsError = error as NSError
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
61 fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
62 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
63 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
64 #endif
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
65 }