58 lines
1.7 KiB
Swift
58 lines
1.7 KiB
Swift
//
|
|
// Persistence.swift
|
|
// Werkout_ios
|
|
//
|
|
// Created by Trey Tartt on 6/13/23.
|
|
//
|
|
|
|
import CoreData
|
|
import SharedCore
|
|
|
|
struct PersistenceController {
|
|
static let shared = PersistenceController()
|
|
private static let runtimeReporter = RuntimeReporter.shared
|
|
|
|
static var preview: PersistenceController = {
|
|
let result = PersistenceController(inMemory: true)
|
|
let viewContext = result.container.viewContext
|
|
for _ in 0..<10 {
|
|
let newItem = Item(context: viewContext)
|
|
newItem.timestamp = Date()
|
|
}
|
|
do {
|
|
try viewContext.save()
|
|
} catch {
|
|
let nsError = error as NSError
|
|
runtimeReporter.recordError(
|
|
"Failed to save preview context",
|
|
metadata: [
|
|
"code": "\(nsError.code)",
|
|
"domain": nsError.domain
|
|
]
|
|
)
|
|
}
|
|
return result
|
|
}()
|
|
|
|
let container: NSPersistentContainer
|
|
|
|
init(inMemory: Bool = false) {
|
|
container = NSPersistentContainer(name: "Werkout_ios")
|
|
if inMemory {
|
|
container.persistentStoreDescriptions.first?.url = URL(fileURLWithPath: "/dev/null")
|
|
}
|
|
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
|
|
if let error = error as NSError? {
|
|
Self.runtimeReporter.recordError(
|
|
"Failed to load persistent store",
|
|
metadata: [
|
|
"code": "\(error.code)",
|
|
"domain": error.domain
|
|
]
|
|
)
|
|
}
|
|
})
|
|
container.viewContext.automaticallyMergesChangesFromParent = true
|
|
}
|
|
}
|