annotate GeoQuiz/Logic/PersistenceController.swift @ 23:02dcebb8cc4a

fix layout issues
author Dennis C. M. <dennis@denniscm.com>
date Thu, 27 Oct 2022 09:17:13 +0200
parents 56add5561261
children
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
22
56add5561261 add mock data creation
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
19
56add5561261 add mock data creation
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
20 #if DEBUG
23
02dcebb8cc4a fix layout issues
Dennis C. M. <dennis@denniscm.com>
parents: 22
diff changeset
21 createMockData(with: viewContext)
22
56add5561261 add mock data creation
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
22 #endif
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
23
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 return result
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
25 }()
20
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 init(inMemory: Bool = false) {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
28 container = NSPersistentCloudKitContainer(name: "GeoQuiz")
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 if inMemory {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
31 container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
32 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
33
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
34 container.loadPersistentStores(completionHandler: { (storeDescription, error) in
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
35 if let error = error as NSError? {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
36 fatalError("Unresolved error \(error), \(error.userInfo)")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
37 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
38 })
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
39
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
40 container.viewContext.automaticallyMergesChangesFromParent = true
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
41 }
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
42
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
43 #if DEBUG
23
02dcebb8cc4a fix layout issues
Dennis C. M. <dennis@denniscm.com>
parents: 22
diff changeset
44 static func createMockData(with moc: NSManagedObjectContext) {
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
45 for _ in 0..<10 {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
46 let playedGame = PlayedGame(context: moc)
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
47
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
48 playedGame.type = GameType(rawValue: Int16.random(in: 0...3))!
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
49 playedGame.score = Int32.random(in: 0...50)
22
56add5561261 add mock data creation
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
50
56add5561261 add mock data creation
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
51 let dayComponent = DateComponents(day: Int.random(in: -5...0))
56add5561261 add mock data creation
Dennis C. M. <dennis@denniscm.com>
parents: 21
diff changeset
52 playedGame.date = Calendar.current.date(byAdding: dayComponent, to: Date())
21
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
53
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
54 if playedGame.type == .guessTheFlag || playedGame.type == .guessTheCapital {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
55 playedGame.correctAnswers = ["Bangladesh", "Belgium", "Burkina Faso", "Bermuda", "Jamaica"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
56 playedGame.wrongAnswers = ["Belarus", "Russia"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
57 } else {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
58 playedGame.correctAnswers = ["Herat", "Lobito", "Darregueira", "San Juan"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
59 playedGame.wrongAnswers = ["San Luis", "Oranjestad"]
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
60 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
61 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
62 do {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
63 try moc.save()
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
64 } catch {
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
65 let nsError = error as NSError
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
66 fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
67 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
68 }
b145c408f791 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
69 #endif
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
70 }