annotate GeoQuiz/Logic/PersistenceController.swift @ 20:e281791e0494

finish implementation
author Dennis C. M. <dennis@denniscm.com>
date Sun, 23 Oct 2022 11:48:39 +0100
parents f140bb277c96
children b145c408f791
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
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
10 class PersistenceController {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
11 static let shared = PersistenceController()
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
12
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13 // Create mock data for previews
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
14 static var preview: PersistenceController = {
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
15 let result = PersistenceController(inMemory: true)
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16 let viewContext = result.container.viewContext
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
17
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
18 for _ in 0..<10 {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
19 let playedGame = PlayedGame(context: viewContext)
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
20 playedGame.type = GameType(rawValue: Int16.random(in: 0...3))!
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
21 playedGame.score = Int32.random(in: 0...50)
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
22 playedGame.date = Date()
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
23
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
24 if playedGame.type == .guessTheFlag || playedGame.type == .guessTheCapital {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
25 playedGame.correctAnswers = ["Bangladesh", "Belgium", "Burkina Faso", "Bermuda", "Jamaica"]
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
26 playedGame.wrongAnswers = ["Belarus", "Russia"]
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
27 } else {
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
28 playedGame.correctAnswers = ["Herat", "Lobito", "Darregueira", "San Juan"]
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
29 playedGame.wrongAnswers = ["San Luis", "Oranjestad"]
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
30 }
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
31 }
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
32 do {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
33 try viewContext.save()
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
34 } catch {
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
35 let nsError = error as NSError
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
36 fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
37 }
19
f140bb277c96 refactor code
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
38
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
39 return result
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
40 }()
20
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
41
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
42 let container: NSPersistentCloudKitContainer
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
43
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
44 init(inMemory: Bool = false) {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
45 container = NSPersistentCloudKitContainer(name: "GeoQuiz")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
46
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
47 if inMemory {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
48 container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
49 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
50
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
51 container.loadPersistentStores(completionHandler: { (storeDescription, error) in
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
52 if let error = error as NSError? {
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
53 fatalError("Unresolved error \(error), \(error.userInfo)")
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
54 }
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
55 })
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
56
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
57 container.viewContext.automaticallyMergesChangesFromParent = true
e281791e0494 finish implementation
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
58 }
16
1011e56b7832 implement user profile
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
59 }