Hallo,
ich versuche gerade meine erste Anwendung zu erstellen - für watchOS. Ist nicht besonders aufwendig, sie ist eigentlich nur ein kleines Hilfsmittel für mein Studium, wo alle Prüfungen aufgelistet sind.
Nun wollte ich eine Funktion einbauen, dass - sobald ich eine Prüfung grün markiert habe - sich automatisch der Studienfortschritt (also die Prozentzahl) gemäß dem Verhältnis der gesamten ECTS für das Studium und der ECTS für die einzelnen Prüfungen.
Habe nun eingebaut, dass die grüne Markierung bei den Prüfungen auch bestehen bleibt, wenn man die Anwendung neu startet, also so lange, bis ich es selber wieder demarkiere.
Grundsätzlich funktioniert das ganze ganz ok, nur, wenn ich die Anwendung neu starte, ist der Studienfortschritt wieder bei 0,00 % - obwohl die Prüfungen noch immer grün markiert sind. Ich muss dann die Prüfung wieder demarkieren, erneut markieren, erst dann erhöht sich wieder die Prozentzahl im Studienfortschritt.
Weiß jemand, was ich hier ändern muss, damit die Prozentzahl bei Neustart übernommen wird und nicht wieder bei 0,00 % ist?
Habe das ganze auch schon in meiner Verzweiflung schon durch ChatGpt 4.0 laufen lassen, aber funktioniert noch immer nicht.
Wäre über jede Hilfe dankbar.. Da ich absoluter Anfänger, weiß ich nun nicht mehr weiter.
Alles anzeigen
ich versuche gerade meine erste Anwendung zu erstellen - für watchOS. Ist nicht besonders aufwendig, sie ist eigentlich nur ein kleines Hilfsmittel für mein Studium, wo alle Prüfungen aufgelistet sind.
Nun wollte ich eine Funktion einbauen, dass - sobald ich eine Prüfung grün markiert habe - sich automatisch der Studienfortschritt (also die Prozentzahl) gemäß dem Verhältnis der gesamten ECTS für das Studium und der ECTS für die einzelnen Prüfungen.
Habe nun eingebaut, dass die grüne Markierung bei den Prüfungen auch bestehen bleibt, wenn man die Anwendung neu startet, also so lange, bis ich es selber wieder demarkiere.
Grundsätzlich funktioniert das ganze ganz ok, nur, wenn ich die Anwendung neu starte, ist der Studienfortschritt wieder bei 0,00 % - obwohl die Prüfungen noch immer grün markiert sind. Ich muss dann die Prüfung wieder demarkieren, erneut markieren, erst dann erhöht sich wieder die Prozentzahl im Studienfortschritt.
Weiß jemand, was ich hier ändern muss, damit die Prozentzahl bei Neustart übernommen wird und nicht wieder bei 0,00 % ist?
Habe das ganze auch schon in meiner Verzweiflung schon durch ChatGpt 4.0 laufen lassen, aber funktioniert noch immer nicht.
Wäre über jede Hilfe dankbar.. Da ich absoluter Anfänger, weiß ich nun nicht mehr weiter.
Quellcode
- import SwiftUI
- enum CourseCategory {
- case firstSection
- case secondSection
- case freeStudy
- }
- // Modell für Lehrveranstaltung mit Kategorie
- struct Course: Identifiable {
- let id = UUID()
- let name: String
- let ects: Int
- var isCompleted: Bool = false
- let category: CourseCategory
- }
- // ViewModel zur Verwaltung des Studienfortschritts
- class StudyProgressViewModel: ObservableObject {
- @Published var courses: [Course] = [
- Course(name: "Prüfung 1", ects: 4, category: .firstSection),
- Course(name: "Prüfung 2", ects: 10, category: .secondSection),
- ]
- let maxECTSPerSection: [CourseCategory: Int] = [
- .firstSection: 44,
- .secondSection: 172,
- .freeStudy: 24
- ]
- init() {
- loadCompletedCourses()
- print("Geladener Fortschritt: \(self.progress)%")
- }
- func saveCompletedCourses() {
- let completedCourses = courses.filter { $0.isCompleted }.map { $0.id.uuidString }
- UserDefaults.standard.set(completedCourses, forKey: "completedCourses")
- UserDefaults.standard.synchronize()
- }
- func refreshProgress() {
- self.objectWillChange.send()
- }
- func loadCompletedCourses() {
- print("Lade abgeschlossene Kurse...")
- guard let completedCourseIDs = UserDefaults.standard.array(forKey: "completedCourses") as? [String] else {
- print("Keine gespeicherten Kurs-IDs gefunden.")
- return
- }
- print("Gespeicherte Kurs-IDs: \(completedCourseIDs)")
- let completedCourseUUIDs = Set(completedCourseIDs.compactMap { UUID(uuidString: $0) })
- for i in 0..<courses.count {
- let wasCompleted = courses[i].isCompleted
- courses[i].isCompleted = completedCourseUUIDs.contains(courses[i].id)
- if wasCompleted != courses[i].isCompleted {
- print("Statusänderung: \(courses[i].name) ist jetzt \(courses[i].isCompleted ? "abgeschlossen" : "nicht abgeschlossen")")
- }
- }
- print("Nach dem Laden ist der Fortschritt: \(progress)%")
- }
- var progress: Double {
- let completedECTS = courses.filter { $0.isCompleted }.reduce(0) { $0 + $1.ects }
- return (Double(completedECTS) / Double(240)) * 100
- }
- func toggleCourseCompleted(courseID: UUID) {
- if let index = courses.firstIndex(where: { $0.id == courseID }) {
- courses[index].isCompleted.toggle()
- let category = courses[index].category
- let currentECTS = completedECTS(for: category)
- if let maxECTS = maxECTSPerSection[category], currentECTS > maxECTS {
- courses[index].isCompleted.toggle() // Änderung rückgängig machen, falls das Limit überschritten wird
- } else {
- saveCompletedCourses() // Änderungen speichern
- }
- } else {
- print("Kurs mit ID \(courseID) nicht gefunden.")
- }
- }
- private func completedECTS(for category: CourseCategory) -> Int {
- return courses.filter { $0.category == category && $0.isCompleted }.reduce(0) { $0 + $1.ects }
- }
- }
- struct StudyProgressView: View {
- @EnvironmentObject var viewModel: StudyProgressViewModel
- var body: some View {
- VStack {
- // Verwende viewModel.progress direkt hier
- Text("Gesamtfortschritt: \(viewModel.progress, specifier: "%.2f")%")
- }
- }
- }