diff --git a/TablePro/Core/Storage/ConnectionStorage.swift b/TablePro/Core/Storage/ConnectionStorage.swift index 546689d9..a2c465b1 100644 --- a/TablePro/Core/Storage/ConnectionStorage.swift +++ b/TablePro/Core/Storage/ConnectionStorage.swift @@ -50,18 +50,22 @@ final class ConnectionStorage { /// Save all connections func saveConnections(_ connections: [DatabaseConnection]) { - cachedConnections = connections - let storedConnections = connections.map { StoredConnection(from: $0) } do { let data = try encoder.encode(storedConnections) defaults.set(data, forKey: connectionsKey) + cachedConnections = nil } catch { Self.logger.error("Failed to save connections: \(error)") } } + /// Invalidate the in-memory cache so the next load reads fresh from UserDefaults. + func invalidateCache() { + cachedConnections = nil + } + /// Add a new connection func addConnection(_ connection: DatabaseConnection, password: String? = nil) { var connections = loadConnections() diff --git a/TablePro/Core/Sync/SyncCoordinator.swift b/TablePro/Core/Sync/SyncCoordinator.swift index fef79093..c6fea0b6 100644 --- a/TablePro/Core/Sync/SyncCoordinator.swift +++ b/TablePro/Core/Sync/SyncCoordinator.swift @@ -379,6 +379,9 @@ final class SyncCoordinator { private func applyRemoteChanges(_ result: PullResult) { let settings = AppSettingsStorage.shared.loadSync() + // Invalidate caches before applying remote data to ensure fresh reads + ConnectionStorage.shared.invalidateCache() + // Suppress change tracking during remote apply to avoid sync loops changeTracker.isSuppressed = true defer {