Files
links/mobile/Heygo/Models/PersistenceController.swift
2025-08-16 11:13:00 +10:00

70 lines
2.0 KiB
Swift

import CoreData
import Foundation
struct PersistenceController {
static let shared = PersistenceController()
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
// Create sample data for previews
let sampleLink = Link(context: viewContext)
sampleLink.alias = "example"
sampleLink.originalURL = "https://example.com"
sampleLink.linkType = "LINK"
sampleLink.clickCount = 5
sampleLink.createdAt = Date()
sampleLink.updatedAt = Date()
sampleLink.linkDescription = "An example link"
let sampleTag = Tag(context: viewContext)
sampleTag.name = "Sample"
sampleTag.slug = "sample"
sampleTag.createdAt = Date()
sampleLink.addToTags(sampleTag)
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
return result
}()
let container: NSPersistentContainer
init(inMemory: Bool = false) {
container = NSPersistentContainer(name: "CoreDataModel")
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)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
}
}
// MARK: - Save context
extension PersistenceController {
func save() {
let context = container.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
}