You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
//
|
|
// PersistenceController.swift
|
|
// Notes
|
|
//
|
|
// Created by Claude Code on 13/10/2025.
|
|
//
|
|
|
|
import CoreData
|
|
|
|
struct PersistenceController {
|
|
static let shared = PersistenceController()
|
|
|
|
static var preview: PersistenceController = {
|
|
let result = PersistenceController(inMemory: true)
|
|
let viewContext = result.container.viewContext
|
|
|
|
// Create sample notes for preview
|
|
for i in 0..<3 {
|
|
let newNote = Note(context: viewContext)
|
|
newNote.content = "Sample note \(i + 1)\n\nThis is some sample content for testing."
|
|
newNote.lastEditDate = Date()
|
|
}
|
|
|
|
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: "Notes")
|
|
|
|
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.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
|
|
container.viewContext.automaticallyMergesChangesFromParent = true
|
|
}
|
|
|
|
func save() {
|
|
let context = container.viewContext
|
|
if context.hasChanges {
|
|
do {
|
|
try context.save()
|
|
} catch {
|
|
let nsError = error as NSError
|
|
print("Unresolved error \(nsError), \(nsError.userInfo)")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|