Ok
import SwiftUI
import CoreData
import Foundation
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
//Abfrage zum Anzeigen
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: false)],
animation: .default)
//Referenz zum Entity Item
var items: FetchedResults<Item>
@State private var name: String = ""
// Test
@State private var editName = ""
@State private var showeditsheet = false
var body: some View {
NavigationView {
VStack{
TextField("Text eingeben", text: $name)
.padding()
Button {
addItem()
} label: {
Text("Save")
}.padding()
List {
ForEach(items, id: \.self) { item in
NavigationLink(destination: ToDo(list:item)) {
HStack {
Text(item.name ?? "Not found")
Button {
self.showeditsheet = true
} label: {
Text("Edit")
}.buttonStyle(.bordered)
}
}
.sheet(isPresented: $showeditsheet){
EditSheet(itemId: item.id!, item:item)
}
}
.onDelete(perform: deleteItems)
}
}
}
}
//MARK: - Hinzufügen der Listen
private func addItem() {
withAnimation {
let newItem = Item(context: viewContext)
newItem.name = name
newItem.id = UUID()
do {
try viewContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
private func deleteItems(offsets: IndexSet) {
withAnimation {
offsets.map { items[$0] }.forEach(viewContext.delete)
do {
try viewContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
}
import SwiftUI
import Foundation
import CoreData
struct EditSheet: View {
@Environment(\.managedObjectContext) private var viewContext
@Environment(\.dismiss) private var dismiss
@State private var name: String = ""
private var item: Item
var itemid: UUID
init(itemId: UUID, item: Item) {
self.item = item
self.itemid = item.id!
self.name = item.name ?? ""
}
var body: some View {
VStack{
TextField("Text eingeben", text: $name)
.padding()
Button {
update(item: item, itemid: item.id!)
dismiss()
} label: {
Text("Save")
}.padding()
}.onAppear{
name = item.name!
}
}
func update(item:Item, itemid id: UUID){
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Item")
fetchRequest.predicate = NSPredicate(format: "id == %@", id as CVarArg)
do {
let results = try viewContext.fetch(fetchRequest) // Rufe den Fetchrequest auf
if results.count > 0 {
let objectToUpdate = results[0] // Nehme das erste
if objectToUpdate.value(forKey: "id") as? UUID == id {
objectToUpdate.setValue(name, forKey: "name") //Editiere den Key "name" zum übergebenen Wert
do {
try viewContext.save() // Speichern
print("Erfolgreich gespeichert!")
} catch let error as NSError {
print("Fehler beim Speichern. \(error), \(error.userInfo)")
}
} else {
print("Fehler: das aktualisierte Element hat eine andere ID als die übergebene.")
}
} else {
print("Fehler: keine Ergebnisse für die angegebene ID gefunden.")
}
} catch let error as NSError {
print("Fehler beim Fetchen. \(error), \(error.userInfo)")
}
}
}