diff --git a/cue-ios/CueIOS/AppState.swift b/cue-ios/CueIOS/AppState.swift index 295e8be..3cac002 100644 --- a/cue-ios/CueIOS/AppState.swift +++ b/cue-ios/CueIOS/AppState.swift @@ -576,8 +576,9 @@ final class AppState { transport.measuring = true send(buildSysexStartClean(vMv: v, durationS: d)) status = String(format: "Cleaning: %.0f mV for %.0fs", v, d) - DispatchQueue.main.asyncAfter(deadline: .now() + Double(d) + 2) { [weak self] in - self?.transport.measuring = false + let t = transport + DispatchQueue.main.asyncAfter(deadline: .now() + Double(d) + 2) { + t.measuring = false } } diff --git a/cue-ios/CueIOS/Transport/UDPManager.swift b/cue-ios/CueIOS/Transport/UDPManager.swift index a958418..467ad86 100644 --- a/cue-ios/CueIOS/Transport/UDPManager.swift +++ b/cue-ios/CueIOS/Transport/UDPManager.swift @@ -72,8 +72,9 @@ final class UDPManager: @unchecked Sendable { connection = conn conn.stateUpdateHandler = { [weak self] newState in + guard let self else { return } DispatchQueue.main.async { - self?.handleStateChange(newState) + self.handleStateChange(newState) } } @@ -184,7 +185,8 @@ final class UDPManager: @unchecked Sendable { private func startTimers() { keepaliveTimer = Timer.scheduledTimer(withTimeInterval: Self.keepaliveInterval, repeats: true) { [weak self] _ in - self?.send(buildSysexGetTemp()) + guard let self else { return } + self.send(buildSysexGetTemp()) } timeoutTimer = Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { [weak self] _ in diff --git a/cue-ios/CueIOS/Views/SessionView.swift b/cue-ios/CueIOS/Views/SessionView.swift index 6c20ce7..07b8879 100644 --- a/cue-ios/CueIOS/Views/SessionView.swift +++ b/cue-ios/CueIOS/Views/SessionView.swift @@ -28,7 +28,9 @@ struct SessionView: View { private func startObserving() { sessionCancellable = Storage.shared.observeSessions { sessions in - self.sessions = sessions + Task { @MainActor in + self.sessions = sessions + } } }