From aebba46989bded9d4d65e99f7db5af6b8a101230 Mon Sep 17 00:00:00 2001 From: Kay Date: Tue, 15 Sep 2026 14:02:48 +0200 Subject: [PATCH] =?UTF-8?q?Bug=2029:=20=C3=9Cbersicht-Tab=20aktualisierte?= =?UTF-8?q?=20sich=20nicht=20selbst=20beim=20Tab-Wechsel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit .task lief nur einmal pro View-Lebenszeit — SwiftUI zerstört Tab-Inhalte auf macOS beim Wechsel nicht, die View bleibt am Leben, .task feuert also nie erneut beim Zurückwechseln. Fix: .onAppear statt .task, feuert bei jedem Sichtbarwerden des Tabs neu — Änderungen aus dem Experte-Tab (z.B. eine neu angelegte Route) erscheinen jetzt automatisch, ohne manuellen "Aktualisieren"-Klick. 59 Unit-Tests grün. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG --- CHATLOG.md | 5 +++++ HANDOFF.md | 9 ++++++++- .../Features/Overview/OverviewView.swift | 12 ++++++++---- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CHATLOG.md b/CHATLOG.md index 4667da3..faaa1bf 100644 --- a/CHATLOG.md +++ b/CHATLOG.md @@ -797,3 +797,8 @@ Test, WLAN/Bonding/PPPoE-Live-Tests). (`distance=0` als verlässliches Signal, da RouterOS' "dynamic"-Flag nicht in `print terse` steht). 59 Unit-Tests grün, HANDOFF.md aktualisiert, Commit + Push. +- "funktioniert, der Übersicht-Tab aktualisiert sich nicht selbst..." → + Bug 29: `.task` lief nur einmal pro View-Lebenszeit, SwiftUI zerstört + Tab-Inhalte auf macOS beim Wechsel aber nicht. Fix: `.onAppear` statt + `.task`, feuert bei jedem Tab-Besuch neu. 59 Unit-Tests grün, HANDOFF.md + aktualisiert, Commit + Push. diff --git a/HANDOFF.md b/HANDOFF.md index c531ed9..646a264 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -579,7 +579,14 @@ Route kann das haben (RouterOS erzwingt 1–255 bei `set`). Fix: mehr an (`editTarget=nil`) — die `.id` einer dynamischen Route ist ohnehin nicht stabil, RouterOS kann sie jederzeit neu anlegen. 59 Unit-Tests grün (neuer Test `OverviewGraphTests. -testDynamicRouteHasNoEditTarget`). +testDynamicRouteHasNoEditTarget`). **Übersicht-Tab aktualisierte sich +nicht selbst nach Tab-Wechsel** (Bug 29) — `.task` lief nur einmal pro +View-Lebenszeit; da SwiftUI Tab-Inhalte beim Wechsel auf macOS nicht neu +erzeugt (die View bleibt am Leben), feuerte `.task` beim Zurückwechseln +nie erneut. Fix: `.onAppear` statt `.task` (feuert bei jedem +Sichtbarwerden des Tabs neu) — Änderungen aus dem Experte-Tab (z.B. eine +neu angelegte Route) erscheinen jetzt automatisch beim Reinschauen, ohne +manuellen "Aktualisieren"-Klick. ## `xcodebuild test` hängt — Gatekeeper, kein Code-Bug diff --git a/RouterOSAssistant/Features/Overview/OverviewView.swift b/RouterOSAssistant/Features/Overview/OverviewView.swift index 456d108..bb6a941 100644 --- a/RouterOSAssistant/Features/Overview/OverviewView.swift +++ b/RouterOSAssistant/Features/Overview/OverviewView.swift @@ -98,10 +98,14 @@ struct OverviewView: View { Button { scale = min(2.0, scale + 0.15) } label: { Image(systemName: "plus.magnifyingglass") } } } - .task { - if viewModel.graph.nodes.isEmpty { - await viewModel.load() - } + .onAppear { + // SwiftUI keeps every tab's content alive when switching tabs on macOS (this view + // isn't torn down and recreated) — `.task` only ever runs once per view lifetime, + // so it wouldn't refire just from revisiting this tab. `.onAppear` does fire again + // each time, which is what actually picks up changes made elsewhere (e.g. a route + // added in the Experte-Tab) without a manual "Aktualisieren" click. Confirmed live + // (2026-09-15): the tab didn't refresh after switching away and back. + Task { await viewModel.load() } } .sheet(item: $expertViewModel.editingItem) { _ in // `selectedSchema` is always set by `editNode` right before `editingItem`, so this