【问题标题】:FirebaseUI-iOS FUIIndexArray UsageFirebaseUI-iOS FUIIndexArray 用法
【发布时间】:2017-05-04 12:36:27
【问题描述】:

由于目前 FirebaseUI 的 FUICollectionDataSource 处理 UI 的所有更改,我正在使用 FUIArray 并观察数据源的更改以及手动更新我的 collectionView。然而,乍一看,我相信我应该实现FUIIndexArray,因为它的排序行为。但是,我不确定它是两个初始化查询。

来自文档:

  • @param index Firebase 数据库查询,其子键都是数据查询的子键。
  • @param data 一个 Firebase 数据库引用,其子项将被提取并用于根据 索引查询。

对于数据参数,我使用与FUIArray 相同的查询(有效)。对于索引参数,我不确定要使用什么,所以我使用相同的查询进行测试,它似乎工作了一半。在这两个查询中,我都按优先级排序。如果我检查FUIIndexArray 的长度,我会得到正确的计数,但是当我检查它的.items 时,数组是空的。

FUIIndexArray 是否应该类似于FUIArray,除了它也返回一个索引?索引查询应该是什么样的?

【问题讨论】:

    标签: ios firebase firebase-realtime-database firebaseui


    【解决方案1】:

    对于 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,尤其是如果您的查询限制需求可以在没有索引的情况下满足。

    【讨论】:

    • 非常感谢您的精彩解释!
    • 我也非常感谢,这是我在 SO 上见过的最全面的答案之一 :)
    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2017-09-10
    • 1970-01-01
    • 2017-02-08
    • 2021-08-09
    相关资源
    最近更新 更多