mirror of
https://github.com/wahyd4/links.git
synced 2026-08-09 05:06:16 +10:00
70 lines
2.0 KiB
Swift
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)")
|
|
}
|
|
}
|
|
}
|
|
}
|