2016-12-19 57 views
2

由於當前FirebaseUI的FUICollectionDataSource處理對UI的所有更改,因此我使用FUIArray並觀察對數據源的更改以及手動更新collectionView。然而,乍一看,我相信我應該實施FUIIndexArray,因爲它的排序行爲。但是,我不確定這是兩個初始化查詢。FirebaseUI-iOS FUIIndexArray Usage

從文檔:

  • @param index一個火力地堡數據庫查詢其子女鍵是數據查詢的所有兒童。
  • @參數data一個Firebase數據庫引用,它將根據 索引查詢獲取子元素並用於填充數組內容。

對於數據PARAM,我使用,我用FUIArray(這工作)所使用的相同的查詢。對於索引參數,我不確定要使用什麼,所以我使用相同的查詢來測試,它似乎是一半工作。在這兩個查詢中,我都按優先級排序。如果我檢查FUIIndexArray的長度,我會得到正確的計數,但是當我檢查其.items時,該陣列是空的。

FUIIndexArray應該與FUIArray類似工作,除了它也返回一個索引?索引查詢應該是什麼樣子?

回答

3

看起來好像對FUIIndexArray實際上應該做什麼有些困惑。 FUIIndexArray使用索引查詢的子元素的鍵從數據查詢中加載子元素,這意味着每個元素加載變得異步,並且如果沒有這些加載完成,那麼.items將不會返回任何內容(儘管也許它應該返回一個完整數組NSNull這裏)。

FUIIIndexArray被設計用於通過查詢來準確指定應該加載哪些元素,從而更容易地加載大數據集的非常精細的部分。假設你的數據庫是這樣的:

// An index to track Ada's memberships 
{ 
    "users": { 
    "alovelace": { 
     "name": "Ada Lovelace", 
     // Index Ada's groups in her profile 
     "groups": { 
     // the value here doesn't matter, just that the key exists 
     "techpioneers": true, 
     "womentechmakers": true 
     } 
    }, 
    ... 
    }, 
    "groups": { 
    "techpioneers": { 
     "name": "Historical Tech Pioneers", 
     "members": { 
     "alovelace": true, 
     "ghopper": true, 
     "eclarke": true 
     } 
    }, 
    ... 
    } 
} 

如果同時usersgroups是非常大的數據集,你會希望能夠有選擇地只下載一個特定的用戶所屬的組。 FUIIndexArray正好解決了這個用例(而沒有其他)。

let adasGroups = database.reference(withPath: "users/alovelace/groups") 
let allGroups = database.reference(withPath: "groups") 

// array will load only alovelace's groups 
let array = FUIIndexArray(index: adasGroups, data: allGroups, delegate:self) 

由於每個元素都必須單獨裝,FUIIndexArrayDelegate提供單獨處理每個負載和實現這個回調正確處理既有成功的負載和錯誤可以加分的複雜性你的代碼的回調。你應該避免使用FUIIndexArray,並且堅持更簡單的FUIArray,特別是如果你的查詢限制需求可以在沒有索引的情況下被滿足。

+0

非常感謝您的好評! –

+0

非常感謝我,這是我見過的最全面的答案之一:) – manmal