iOS: gescanntes Einzelstueck oeffnet sich (Abbruch behoben)
Der Abruf schlug mit „Abgebrochen" (URLError.cancelled) fehl, nicht mit 404: openItemUid wurde zu Beginn des .task(id:) auf nil gesetzt, wodurch SwiftUI die laufende Anfrage abbrach. Jetzt wird openItemUid erst NACH dem Laden zurueckgesetzt – das Stueck oeffnet sich. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -46,21 +46,22 @@ struct RootView: View {
|
|||||||
}
|
}
|
||||||
.task(id: router.openItemUid) {
|
.task(id: router.openItemUid) {
|
||||||
guard let uid = router.openItemUid else { return }
|
guard let uid = router.openItemUid else { return }
|
||||||
router.openItemUid = nil
|
// openItemUid NICHT vor dem Abruf zurücksetzen: das ändert die
|
||||||
|
// .task-id und SwiftUI bricht dadurch die laufende Anfrage ab
|
||||||
|
// (URLError.cancelled). Erst nach dem Laden auf nil setzen.
|
||||||
let host = session.activeProfile?.url?.host ?? "?"
|
let host = session.activeProfile?.url?.host ?? "?"
|
||||||
guard session.isLoggedIn else {
|
if session.isLoggedIn {
|
||||||
linkError = "Bitte zuerst am Server \(host) anmelden, dann erneut scannen."
|
|
||||||
return
|
|
||||||
}
|
|
||||||
do {
|
do {
|
||||||
linkedItem = try await APIClient.shared.itemByUid(uid: uid)
|
linkedItem = try await APIClient.shared.itemByUid(uid: uid)
|
||||||
} catch {
|
} catch {
|
||||||
// Bei korrekter UID heißt 404 fast immer: der aktive Server ist ein
|
|
||||||
// anderer als der im QR-Code. Deshalb den Server benennen.
|
|
||||||
linkError = "Einzelstück \(uid) auf Server \(host) nicht gefunden. "
|
linkError = "Einzelstück \(uid) auf Server \(host) nicht gefunden. "
|
||||||
+ "Zeigt der QR-Code auf denselben Server wie der oben gewählte? "
|
+ "Zeigt der QR-Code auf denselben Server wie der oben gewählte? "
|
||||||
+ "(\(error.localizedDescription))"
|
+ "(\(error.localizedDescription))"
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
linkError = "Bitte zuerst am Server \(host) anmelden, dann erneut scannen."
|
||||||
|
}
|
||||||
|
router.openItemUid = nil
|
||||||
}
|
}
|
||||||
.sheet(item: $linkedItem) { it in
|
.sheet(item: $linkedItem) { it in
|
||||||
NavigationStack { ItemEditView(item: it) }
|
NavigationStack { ItemEditView(item: it) }
|
||||||
|
|||||||
Reference in New Issue
Block a user