簡體   English   中英

如何在 UserDefaults 中存儲 Firebase ListenerRegistration object?

[英]How to store a Firebase ListenerRegistration object in UserDefaults?

我正在編寫一個用於從 UserDefaults 存儲、檢索和刪除快照偵聽器的包裝器。 但是,我遇到了一些問題。 我正在嘗試通過執行以下操作來存儲它:

  1. ListenerRegistration偵聽器編碼為Data
  2. 使用新鍵 + 數據更新我的 activeListeners 字典 ( [String:Data] ) 屬性
  3. 將更新后的 activeListeners 字典存儲在 UserDefaults 中
func storeListener(listener: ListenerRegistration, for objectId: String, atPath path: AppAPI.Path) {
        let key = formatKeyForListener(objectId: objectId, path: path)
        do {
            let encodedListenerData = try NSKeyedArchiver.archivedData(withRootObject: listener, requiringSecureCoding: false)
            activeListeners.updateValue(encodedListenerData, forKey: key)
            UserDefaults.standard.set(activeListeners, forKey: Strings.listenersKey)
            UserDefaults.standard.synchronize()
        } catch {
            print("Error encoding listener with key: \(key)\nError: \(error.localizedDescription).")
        }
    }

不幸的是,我看到以下錯誤: Error: The data couldn't be written because it isn't in the correct format...

Firestore 偵聽器不會在應用啟動之間持續存在。 當應用程序進程以任何方式被殺死時,所有的偵聽器都會消失,並且在應用程序再次啟動時不會回來。 如果您希望監聽器在下次啟動時返回,您將需要編寫代碼來再次建立這些監聽器,並決定如何處理它們生成的任何文檔。 如果這是您想要的,那么您應該集中精力找出如何在存儲系統中表示這些偵聽器(可能只是一個集合或文檔路徑就可以了),並在啟動時重新構建它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM