Firebase 快照顺序错误

2024-03-04

我尝试将存储在 firebase 上的帖子加载到我的 tableView 中。我使用 .childAdded 函数按照发布的顺序(从第一个到最后一个)获取帖子。起初它似乎有效,但现在不再有效,我不知道为什么。因此,我在帖子中添加了时间戳并使用了 queryOrderedByChild("timestamp")。但仍然是错误的顺序!这是我的代码:

posts.removeAll()
    let ref = FIRDatabase.database().reference()

    ref.child("Posts").queryOrderedByChild("timestamp").observeEventType(.ChildAdded, withBlock: { (snapshot:FIRDataSnapshot) in

        print(snapshot.value!["timestamp"] as! Int)
        if snapshot.value == nil {
            return
        }
        let post = Post()
        post.title = snapshot.value!["Title"] as? String
        post.postType = snapshot.value!["postType"] as? Int
        post.postDescription = snapshot.value!["Description"] as? String

        if post.postType == 2 {
            post.imageAURL = snapshot.value!["imageAURL"] as? String
            post.imageBURL = snapshot.value!["imageBURL"] as? String
        }else if post.postType == 3 {
            post.imageAURL = snapshot.value!["imageAURL"] as? String
            post.imageBURL = snapshot.value!["imageBURL"] as? String
            post.imageCURL = snapshot.value!["imageCURL"] as? String
        }


        let createdByID = snapshot.value!["createdBy"] as! String
        var username = String()
        let usernameRef = FIRDatabase.database().reference().child("users").child(createdByID)
        usernameRef.observeSingleEventOfType(.Value, withBlock: { (snapshot:FIRDataSnapshot) in

            username = snapshot.value!["username"] as! String
            post.createdBy = username
            self.posts.append(post)
            self.tableView.reloadData()
            }, withCancelBlock: nil)




            dispatch_async(dispatch_get_main_queue(), {

                self.tableView.reloadData()
            })


        }, withCancelBlock: nil)


}

在查询开始时打印时间戳值:

1471008028
1471007899
1471007928
1471007979

可以看到,第一个Int是最高的,接下来的三个按升序正确排列,但是为什么最高的在第一个而不是最后一个呢?我不知道它是否与此有关,但代码位于 viewDidLoad 内部调用的函数内。


有一个现有的answer https://stackoverflow.com/a/15723418/6680611这解释了为什么 Firebase JavaScriptchild_added事件发生无序。它仍然适用,也是您的快照以意外顺序交付的原因。

我知道这可能看起来很奇怪,但这实际上是预期的行为。

为了保证本地事件可以立即触发而无需先与服务器通信,Firebase 不保证 child_added 事件始终按排序顺序调用。

要将收到的快照按正确的顺序排列,您需要快照附带的前一个同级密钥(称为prevChildName在引用的答案中)。要获取前一个同级密钥,您需要使用observeEventType:andPreviousSiblingKeyWithBlock: https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_database_query.html#a206825e56f8ab6803b1764feec51cd45.

Firebase 文档observeEventType:andPreviousSiblingKeyWithBlock:没有明确说明如何使用前一个同级密钥来排列接收到的快照。

出于示例目的,要在阵列中存储和排序快照,您需要对每个收到的快照执行以下操作:

  • 如果接收到的快照的前一个兄弟键为空,则将其添加到数组的头部;
  • 否则,在阵列中查找具有key https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_data_snapshot.html#a84dcc624075720e171f27b8e9ee8c678等于前一个同级键(伴随收到的快照)并将收到的快照插入到数组中找到的快照之后;
  • 如果不存在具有前一个兄弟键的快照,则将接收到的快照添加到数组的尾部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 快照顺序错误 的相关文章

  • 从两种不同类型的数组中获取公共数据

    struct Human let name String let id String let travelled String struct Animal let name String let id String let travelle
  • 在 Objective-C 中检查 Json 响应的空值

    AT null EA null AD2 OP null AdsLst EMs null ND MN null FN Sony LN J ZP 23456 CT 1 PP 0 cId 161464 Pos null WPExt null OS
  • 将歌词存储在 MySQL 数据库中

    我想知道在 mysql 数据库中存储音乐 歌词 的最佳方式是什么 以及用于此目的的设置是什么 另外 我想要表格来存储断线 我正在考虑使用 指示新行并使用 php 替换字符串 我不知道从哪里开始 或者使用什么参数 varchar int 我知
  • 在 UITableView 中进行分页的最佳方法

    我正在开发一个房地产应用程序 用户填写表单 最小房间数 价格等 后 应用程序查询数据源服务器 并获取具有特定键 值对 属性名称 属性地址 经度 纬度 价格等 的 json 字符串 我想做的是允许用户浏览 UITableView 中的列表 即
  • 在 Swift 中,如何检测哪些 UIControl 事件触发了操作?

    我目前有 4 个 UITextField IBOutlet weak var fNameTextField UITextField IBOutlet weak var lNameTextField UITextField IBOutlet
  • 使 MKMapView 只放大 centerCoordinate 吗?

    我有一个始终位于地图中心的 MKPinAnnotationView 平移和缩放时 该图钉为我提供了地图的中心坐标 纬度 经度 目前 当您放大时 它只会放大您指定地图放大的位置 我真的很想将变焦锁定在图钉上 关于我如何实现这一目标有什么想法吗
  • 在 Grand Central Dispatch 中使用dispatch_sync

    任何人都可以用非常清晰的用例解释其目的是什么dispatch sync in GCD是为了 我不明白在哪里以及为什么我必须使用它 Thanks 当您想要执行一个块并等待结果时可以使用它 其中一个示例是使用调度队列而不是锁进行同步的模式 例如
  • 如何禁用 ARCoachingOverlayView 的自动激活?

    我正在添加一个ARCoachingOverlayView to my ARView像这样 let coachingOverlayTemp ARCoachingOverlayView coachingOverlayTemp delegate
  • 如何以编程方式创建 Unwind segue

    我制作了一个不使用故事板的应用程序 在我的应用程序的这一部分中 我需要创建一个展开转场ThirdViewController to FirstViewController仅以编程方式 我知道如何使用 sotorybard 执行此操作 但找不
  • 我们可以在 Objective-C 中创建可空/非空属性吗?

    我们可以在 Objective C 中创建可空 非空属性吗 如果可以 那么如何创建 您可以使用 Nullable and Nonnull预选赛 property copy nullable NSString name property co
  • 扩展功能截图未捕获 iPhone 和 iPad 中的同一区域

    我正在使用扩展函数来截取 uiview 的屏幕截图 问题是结果看起来非常不同 我希望无论使用 ipad 还是 iphone 照片看起来都一样 我手动输入约束 因此我希望图像是相同的 我想使用该函数转到视图控制器的原点或中心 高度为 200
  • 将 GestureRecogniser 附加到多个图像视图

    今天我在将相同的手势识别器附加到多个图像视图时遇到了一些奇怪的事情 它仅附加到最后一个视图 换句话说 它只能附加到一个视图 我必须创建多个手势识别器才能满足我的要求 以下是我所做的 我做的对吗 这是将识别器附加到多个图像视图的唯一方法吗 请
  • Swift 2.1- tabBarController!.selectedIndex 返回大整数

    我需要把tabBarController selectedIndex常量内的数字 我期望一个介于 0 和 3 之间的数字 具体取决于我选择的选项卡 但我得到的数字如下2147483647 有什么想法吗 代码是 let selectedTab
  • 隐藏标签栏并删除空格

    有没有办法隐藏选项卡栏并删除剩余的空间 大约 50px I tried self tabBarController tabBar hidden true self extendedLayoutIncludesOpaqueBars true
  • Javascript变量是一个对象数组,但无法访问元素

    我正在使用 Firebase 数据库和 Javascript 并且我有代码可以获取每个类别中的每个问题 我有一个名为 类别 的对象 其中包含名称 问题和问题计数 然后它将被推入类别列表 questionsPerCategory 在我刚刚做的
  • iOS 版 Google Analytics 中的线程崩溃

    使用适用于 iOS 版本 3 0 9 以及一般的 3 0 x 的 Google Analytics 库 我们看到很多像下面这样的崩溃 它们似乎是随机发生的 Exception Type SIGBUS Exception Codes BUS
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 如何从 Xcode 中导航栏上的后退按钮中删除文本?

    我通过在应用程序委托中添加以下代码来将箭头自定义图像设置为导航栏 它可以工作 但现在我希望完全删除后退按钮的文本 UIImage backButtonImage UIImage imageNamed BackButtonGrey png b
  • 如何使 SwiftUI 列表行背景颜色扩展整个宽度,包括安全区域之外

    在 SwiftUI 中List 如何制作列表行背景 通过设置 listRowBackground 扩展视图的整个宽度 甚至在安全区域下方 例如 在宽屏 iPhone 例如 iPhone 12 Pro Max 上横向运行时 目前 该单元格在安
  • Xcode 8.3 / Xcode 9.0 刷新配置文件设备

    我添加了一些新设备 当 Xcode 8 自动管理签名资产时 如何刷新配置文件 我发现了这个问题 刷新 Xcode 7 管理的团队配置文件中的设备 https stackoverflow com questions 32729193 refr

随机推荐

  • Servlet 中的 JSF 托管 Bean

    有没有办法从 servlet 访问 JSF 托管 bean 在 Servlet 中 您可以通过以下方式获取请求范围的 beans Bean bean Bean request getAttribute beanName 和会话作用域的 be
  • Java 数组效率

    我不能 100 确定该机制正在发挥作用 因此我决定在此发帖以进一步澄清 我正在做一个项目 应该用Java处理大量数据 它必须是Java 我希望它尽可能高效 我所说的高效是指内存和计算速度应该放在第一位 可读性应该放在第二位 现在我有两种方法
  • 使用图像(宽高比填充)和视频制作 AVMutableComposition 以适合宽高比

    我正在尝试使用尺寸始终为 CGSize 375 667 的图像制作新视频 但视频尺寸不同 且 contentMode 为 aspectFit 问题是我无法弄清楚如何使整个视频组合具有正确的尺寸 即图像尺寸 而是视频的自然尺寸和一堆奇怪的结果
  • 批量使用 PowerShell 命令的问题

    我使用 PowerShell 命令从云下载 zip 文件 该命令在 PowerShell 和命令行中都能正常工作 但是 如果我将命令行中的命令插入批处理脚本中 则只会下载 html 为什么该命令在命令行中可以正常工作 但在批处理文件中却不能
  • GET 文件上传如何工作?

    有谁知道怎么办GWT文件上传有效吗 我知道关于FileUpload小部件以及如何使用它 我想知道它的内在机制是什么 我们无法从中获取文件内容FileUpload客户端中的小部件以及它如何发送到服务器 我用谷歌搜索但没有得到解决方案 提前致谢
  • 仅当活动未显示时才显示通知

    我有一个想要处理的后台任务 问题是 当任务完成时 我想调用一个新的 Activity 来向用户显示结果 前提是我的主 Activity 正在显示 否则我只想发送一个通知 以便用户可以看到该操作已完成 并且可以随时打开它 我正在考虑使用一个服
  • 强制从 s3 亚马逊服务器下载

    我一直在开发一个新的网络应用程序 它依赖于亚马逊S3服务器作为存储系统 以及代码点火器作为 PHP 框架 我需要在单击链接时强制下载文件 原始网址如下所示 http www our web com download do 1 jpg 它会生
  • 主构造函数内的 Scala 局部变量

    在 Scala 中如何在主构造函数中定义局部变量 我需要解决这个练习Scala for the impatient book 编写一个具有接受字符串的主构造函数的 Person 类 包含名字 空格和姓氏 例如 new 人 弗雷德 史密斯 提
  • Kafka 主题分区

    关于 Kafka 主题和分区的一个简单问题 假设以下场景 Producer1将数据写入Topic1 Producer2向Topic2写入数据 Consumer读取Topic 1和Topic 2的数据 Consumer2仅从Topic2读取数
  • S 的最长平衡子序列

    给出的问题 一串括号据说是 如果字符串中的左括号和右括号可以正确配对 则为平衡 例如 字符串 和 都是平衡的 而字符串 则不是 均衡 给定一个字符串S长度n由括号组成 假设你想找到最长的子序列S这是平衡的 使用动态规划 设计一个算法来找到最
  • 从 Resteasy 服务器返回文件

    你好 我想从 Resteasy 服务器返回一个文件 为此 我在客户端有一个链接 它使用 ajax 调用休息服务 我想在其余服务中返回文件 我尝试了这两段代码 但都没有按照我想要的方式工作 POST Path exportContacts p
  • 仅加载关系的 id(pluck)

    我有一个简单的应用程序 使用 Laravel 5 5 13 public function index return Pet all 这列出了所有宠物 我有多对多关系 其中许多用户可以拥有同一只宠物 宠物的人类家庭 我想加载这些用户 Doi
  • 文件夹如何工作?

    谁能解释一下怎么做foldr http haskell org ghc docs latest html libraries base Prelude html v foldr work 举这些例子 Prelude gt foldr 54
  • 如何在phar文件代码中获取.phar文件真实目录?

    我正在尝试创建一个php可执行文件 phar文件 来生成一些文件 我想知道如何获取phar文件的真实路径 在phar文件代码内 我想要做的是在phar文件的同一级别创建一个文件夹并在那里创建新文件 但是realpath DIR 似乎不起作用
  • Git:“工作树”到底是什么?与“工作目录”相同吗?

    我正在阅读大量有关 Git 的文档 最近我一直在寻找 工作树 概念 但我不明白 工作树 到底是什么 我找到了这样的描述 什么是工作树 https mijingo com blog what is the working tree in gi
  • 在 ActionScript 2.0 中按程序访问函数的参数列表

    我已经可以通过执行类似以下操作来获取类中的所有函数 for var member in obj if obj member instanceof Function var f Function obj member 有没有办法在动作脚本中获
  • Haskell、Lisp 和冗长[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 生产中的 Azure SDK 2.2:无法加载文件或程序集“msshrtmi”或其依赖项之一。该系统找不到指定的文件

    我在 StackOverflow 和其他网站上的其他几个线程中读到过有关此问题的信息 其他解决方案都没有解决我的问题 而且大多数都已经过时 引用了旧版本的 Azure SDK 我有一个部署到 Azure 的典型 Azure 网站角色 该角色
  • Postgrex.Error ERROR 42501 unavailable_privilege 无法创建扩展 citext

    我正在尝试创建迁移 这是输出 MIX ENV prod DATABASE URL URL mix ecto migrate info execute CREATE EXTENSION citext Postgrex Error ERROR
  • Firebase 快照顺序错误

    我尝试将存储在 firebase 上的帖子加载到我的 tableView 中 我使用 childAdded 函数按照发布的顺序 从第一个到最后一个 获取帖子 起初它似乎有效 但现在不再有效 我不知道为什么 因此 我在帖子中添加了时间戳并使用