aboutsummaryrefslogtreecommitdiff
path: root/Map/Data/Persistence.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Map/Data/Persistence.swift')
-rw-r--r--Map/Data/Persistence.swift42
1 files changed, 42 insertions, 0 deletions
diff --git a/Map/Data/Persistence.swift b/Map/Data/Persistence.swift
new file mode 100644
index 0000000..1eb09e8
--- /dev/null
+++ b/Map/Data/Persistence.swift
@@ -0,0 +1,42 @@
+import CoreData
+
+struct PersistenceController {
+ static let shared = PersistenceController()
+
+ static var preview: PersistenceController = {
+ let result = PersistenceController(inMemory: true)
+ let viewContext = result.container.viewContext
+ for _ in 0..<10 {
+ let newMap = Map(context: viewContext)
+ newMap.uuid = UUID()
+ newMap.createdAt = Date()
+ newMap.title = "Map \(newMap.createdAt!.format())"
+ newMap.content = ""
+ }
+ do {
+ try viewContext.save()
+ } catch {
+ let nsError = error as NSError
+ fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
+ }
+ return result
+ }()
+
+ let container: NSPersistentCloudKitContainer
+
+ init(inMemory: Bool = false) {
+ container = NSPersistentCloudKitContainer(name: "Map")
+
+ container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
+ container.viewContext.automaticallyMergesChangesFromParent = true
+
+ if inMemory {
+ container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
+ }
+ container.loadPersistentStores(completionHandler: { (storeDescription, error) in
+ if let error = error as NSError? {
+ fatalError("Unresolved error \(error), \(error.userInfo)")
+ }
+ })
+ }
+}