@@ -21,7 +21,7 @@ let GlobalIDKey: String = "_id"
2121@available ( iOS 15 . 0 , macOS 12 . 0 , tvOS 15 . 0 , watchOS 8 . 0 , * )
2222actor Cache {
2323 let config : CacheSettings
24- let dataConnect : DataConnect
24+ weak var dataConnect : DataConnect ?
2525
2626 private var cacheProvider : CacheProvider ?
2727
@@ -42,6 +42,11 @@ actor Cache {
4242
4343 private func initializeCacheProvider( ) {
4444 let identifier = contructCacheIdentifier ( )
45+
46+ guard identifier. isEmpty == false else {
47+ DataConnectLogger . error ( " CacheIdentifier is empty. Caching is disabled " )
48+ return
49+ }
4550
4651 // Create a cacheProvider if -
4752 // we don't have an existing cacheProvider
@@ -63,13 +68,23 @@ actor Cache {
6368 }
6469
6570 private func setupChangeListeners( ) {
71+ guard let dataConnect else {
72+ DataConnectLogger . error ( " Unable to setup auth change listeners since DataConnect is nil " )
73+ return
74+ }
75+
6676 authChangeListenerProtocol = Auth . auth ( app: dataConnect. app) . addStateDidChangeListener { _, _ in
6777 self . initializeCacheProvider ( )
6878 }
6979 }
7080
7181 // Create an identifier for the cache that the Provider will use for cache scoping
7282 private func contructCacheIdentifier( ) -> String {
83+ guard let dataConnect else {
84+ DataConnectLogger . error ( " Unable to construct a cache identifier since DataConnect is nil " )
85+ return " "
86+ }
87+
7388 let identifier =
7489 " \( config. storage) - \( dataConnect. app. options. projectID!) - \( dataConnect. app. name) - \( dataConnect. connectorConfig. serviceId) - \( dataConnect. connectorConfig. connector) - \( dataConnect. connectorConfig. location) - \( Auth . auth ( app: dataConnect. app) . currentUser? . uid ?? " anon " ) - \( dataConnect. settings. host) "
7590 let encoded = identifier. sha256
@@ -139,16 +154,18 @@ actor Cache {
139154 )
140155 )
141156
142- for refId in impactedRefs {
143- guard let q = dataConnect. queryRef ( for: refId) as? ( any QueryRefInternal ) else {
144- continue
145- }
146- Task {
147- do {
148- try await q. publishCacheResultsToSubscribers ( allowStale: true )
149- } catch {
150- DataConnectLogger
151- . warning ( " Error republishing cached results for impacted queryrefs \( error) ) " )
157+ if let dataConnect {
158+ for refId in impactedRefs {
159+ guard let q = dataConnect. queryRef ( for: refId) as? ( any QueryRefInternal ) else {
160+ continue
161+ }
162+ Task {
163+ do {
164+ try await q. publishCacheResultsToSubscribers ( allowStale: true )
165+ } catch {
166+ DataConnectLogger
167+ . warning ( " Error republishing cached results for impacted queryrefs \( error) ) " )
168+ }
152169 }
153170 }
154171 }
0 commit comments