由于当前Firebaseui的FUICollectionDataSource
处理了对UI的所有更改,因此我使用FUIArray
并观察数据源的更改,并手动更新CollectionView。但是,第二一目我相信我应该已经实施了FUIIndexArray
,因为其有序行为。但是,我不确定这是两个初始查询。
来自文档:
- @param索引一个firebase数据库查询,其儿童钥匙都是数据查询的孩子。
- @param数据一个firebase数据库参考,其儿童将被取消并根据数组的内容填充数组的内容 索引查询。
对于数据参数,我使用的是与FUIArray
(有效)使用的相同查询。对于索引参数,我不确定要使用什么,因此我使用相同的查询测试,并且似乎有一半工作。在两个查询中,我都按优先级进行排序。如果我检查FUIIndexArray
的长度,我会得到正确的计数,但是当我检查其.items
时,数组为空。
FUIIndexArray
是否应该与FUIArray
相似,除了它也返回索引吗?索引查询应该是什么样的?
看起来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
}
},
...
}
}
如果users
和groups
都是非常大的数据集,则您希望能够选择性地仅下载特定用户所属的组。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,尤其是在没有索引的情况下可以满足您的查询限制需求的情况下。