【问题标题】:Firebase loading snapshots issueFirebase 加载快照问题
【发布时间】:2016-12-28 10:40:02
【问题描述】:

我使用 Firebase 作为用于消息传递的数据库。

  1. 我在observeEventType:-block 中的第一个问题。它被频繁调用多次,我不知道何时停止活动指示器。
  2. 另一个问题是scrollToRowAtIndexPath 会挂起我的视图,直到所有 Firebase 快照都未加载。目的是向下滚动到表格视图的最后一行。请帮忙。

Firebase 数据库查询中是否有任何内容可以知道 Firebase 数据库中有多少计数?

    firRef = [[[FIRDatabase database] reference] child:childLocation];

    [firRef keepSynced:YES];

     fireDBHandler = [firRef observeEventType:FIRDataEventTypeChildAdded 
    withBlock:^(FIRDataSnapshot *snapshot) {

     NSMutableDictionary<NSString *, NSString *> *messageDic =  snapshot.value;

    [self.clientTable scrollToRowAtIndexPath:[NSIndexPath 
    indexPathForRow:[messages count]-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];

    }];

【问题讨论】:

    标签: ios objective-c firebase firebase-realtime-database


    【解决方案1】:

    我建议阅读 working with lists of data,因为它解释了事件的工作原理。

    在这里深入研究您的代码是一些观察结果:

    您正在使用 ChildAdded 事件和文档状态

    此事件为每个现有的孩子触发一次,然后再次触发 每次将新的孩子添加到指定路径时。

    因此,如果您有 10 个子节点,则该块将连续调用 10 次,每个子节点调用一次。根据您的代码,它将尝试为每个没有必要的孩子滚动。

    有几个解决方案。

    如果您正在加载一系列用户,则可以使用 Value 的单个事件。这将一次读取所有节点,然后您可以遍历这些节点,填充您的数据源(通常是一个数组),然后简单地滚动到最后一个索引。

    [ref observeSingleEventOfType:FIRDataEventTypeValue withBlock:
                 ^(FIRDataSnapshot * _Nonnull snapshot) {
    
        //it is here we iterate over each node in the snapshot
        //and add the data to an array dataSource.
    
      } withCancelBlock:^(NSError * _Nonnull error) {
        NSLog(@"%@", error.localizedDescription);
    }];
    

    另一个选择是利用在 ChildAdded 事件之后调用 Value 事件这一事实。

    从概念上讲,您将一个 childAdded 观察者附加到一个节点,并将一个 Value 观察者附加到同一节点。添加的子事件将首先触发并遍历每个子元素,以便您可以将其添加到数组数据源,然后在完成时触发 value 事件,您可以重新加载 tableView 或滚动到最后一个索引,因为所有子元素都已加载。

    有关编码示例,请参阅我对 Loading Records 的回答。

    【讨论】:

    • 是的,observeSingleEventOfType 节省了我的时间。它在一个节点上返回计数,我会进行动画处理,直到所有快照都等于计数。谢谢!!
    猜你喜欢
    • 2019-01-18
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2019-07-31
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多