由于当前FirebaseUI的FUICollectionDataSource
处理了UI的所有更改,因此我正在使用FUIArray
并观察对数据源的更改以及手动更新我的collectionView。但是,乍一看,我相信我应该已经实现FUIIndexArray
,因为它的排序行为。但是,我不确定这是两个init查询。
从文档:
索引查询。
对于数据参数,我使用的是与
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,尤其是如果没有索引就可以满足查询限制的需求时。