我的Firebase用例與大多數用戶略有不同。我們不使用FB專門用於我們的後端。我們有一個處理關係和所有數據的大型MariaDB服務器。Firebase數據庫 - 避免在iOS上反覆下載JSON
我們使用FB的目標是允許iOS設備上的客戶端提供其特定的數據。我們需要加載數據一次,然後監聽對這些特定數據的更改。這裏是它如何工作的一個粗略地:
- 主視圖控制器被加載
- 火力地堡已經初始化,我們聽FIRDataEventTypeChildAdded。 (持續性已啓用)
- Firebase加載所有匹配的記錄。然後我們遍歷並將它們本地存儲在內部SQLite數據庫中。
在正常的用戶流中,我們在屏幕上推送其他ViewControllers。問題是,一旦加載了主ViewController,FIRDataEventTypeChildAdded會爲每條記錄再次觸發。
問題:
- 當FIRDataEventTypeChildAdded再次開火,它是由加載其內部緩存(持久性?)的數據,或者它重新下載從服務器火力地堡的一切?我使用Network Link Conditioner完全切斷了互聯網連接,當我這樣做時,它根本不觸發FIRDataEventTypeChildAdded,但一旦網絡返回,它就會爲每條記錄觸發FIRDataEventTypeChildAdded。
- 我怎樣才能實現上述加載登錄的所有記錄,然後只聽取這些記錄的變化?我已經使用orderBy和startingAt所以如果答案涉及上述之一,我不能添加另一個「hasDownloaded = yes」過濾器。
在此先感謝。
請分享您正在測試的代碼。沒有這個,很難說具體的東西。另請參閱[創建MCVE](http://stackoverflow.com/help/mcve)。 –
在這種情況下,代碼無關緊要。問題在於Firebase在幕後工作的方式沒有明確的定義。 爲了簡單起見,我在我的主ViewController中有一個ChildAdded和ChildChanged偵聽器: 請重新閱讀我上面的問題,因爲它涉及瞭解每次裝入VC時是否從服務器下載JSON,或者如果它從本地緩存中獲取它,但仍然觸發ChildAdded偵聽器。 – Adam
目前還不清楚在這裏沒有看到你的viewController和Firebase是如何在代碼中實現的。即每次VC被加載*都高度依賴於VC內的代碼。 .childAdded事件有意設計爲每個孩子啓動一個,然後添加任何其他孩子。它會觸發重新連接後添加的任何新的子項,但是,它依賴於您的實施。 – Jay