diff --git a/heatguard-iOS/Core/Network/HGErrorPresentation.swift b/heatguard-iOS/Core/Network/HGErrorPresentation.swift index a2e9dde..7e8beb0 100644 --- a/heatguard-iOS/Core/Network/HGErrorPresentation.swift +++ b/heatguard-iOS/Core/Network/HGErrorPresentation.swift @@ -49,3 +49,12 @@ struct HGErrorPresentation: Hashable { "\(message)\n\n오류 코드: \(diagnosticCode)" } } + +extension Error { + var hgIsNetworkCancellation: Bool { + if self is CancellationError { return true } + + let error = self as NSError + return error.domain == NSURLErrorDomain && error.code == NSURLErrorCancelled + } +} diff --git a/heatguard-iOS/Presentation/Features/Home/HomeView.swift b/heatguard-iOS/Presentation/Features/Home/HomeView.swift index 141b244..41c53e0 100644 --- a/heatguard-iOS/Presentation/Features/Home/HomeView.swift +++ b/heatguard-iOS/Presentation/Features/Home/HomeView.swift @@ -174,7 +174,11 @@ struct HomeView: View { } message: { Text(dashboardError?.alertMessage ?? "") } - .alert("긴급 호출에 실패했습니다.", isPresented: emergencyErrorAlert) { + .alert(emergencyError?.title ?? "긴급 호출 상태 확인 오류", isPresented: emergencyErrorAlert) { + Button("다시 시도") { + emergencyError = nil + Task { await restoreCurrentEmergencyCall() } + } Button("확인", role: .cancel) {} } message: { Text(emergencyError?.alertMessage ?? "") @@ -497,7 +501,12 @@ struct HomeView: View { activeEmergencyCallID = currentCall.id activeEmergencyCallStatus = currentCall.status } catch { - emergencyError = HGErrorPresentation(error: error) + guard !Task.isCancelled, !error.hgIsNetworkCancellation else { return } + emergencyError = HGErrorPresentation( + title: "긴급 호출 상태를 확인하지 못했습니다", + message: "네트워크 연결을 확인한 뒤 다시 시도해주세요. 진행 중인 호출은 관리자에게 확인해주세요.", + diagnosticCode: HGErrorPresentation(error: error).diagnosticCode + ) } }