ios - Firebase 下载相同的数据

标签 ios swift firebase viewdidappear

我在 swift 中使用 firebase,我在 viewDidAppear: 中调用监听器:正如文档中所写,它不应该再次下载相同的数据,但现在每次 View 出现时都会显示相同的数据。

 override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)
    getData()
    self.messagesRef.keepSynced(true)
}
func getData(){
    messagesRef.observeEventType(.ChildAdded) { (mesData: FDataSnapshot!) -> Void in

        let messageDict = mesData.value as! NSDictionary

        let key = mesData.key

        self.likedRef = self.ref.childByAppendingPath("likedMessages/\(currentUser.uid)/\(key)")

        self.likedRef.observeSingleEventOfType(.Value) { (likedFd: FDataSnapshot!) -> Void in
            if likedFd.value is NSNull{
                let liked = false
                let message = Message(message: messageDict, key: key, liked: liked, topicKey: self.topic.key)
                self.messages.append(message)
                self.messages.sortInPlace{$0.createdAt.compare($1.createdAt) == .OrderedDescending}

            }
            else{
                let liked = likedFd.value as! Bool
                let message = Message(message: messageDict, key: key, liked: liked, topicKey: self.topic.key)
                self.messages.append(message)
                self.messages.sortInPlace{$0.createdAt.compare($1.createdAt) == .OrderedDescending}
            }
            dispatch_async(dispatch_get_main_queue()) { () -> Void in
                self.messagesTableView.reloadData()
            }
            self.likedRef.keepSynced(true)
        }

        print(mesData.value)
    }
}

最佳答案

如果您将第一个监听器添加到某个位置,Firebase 将下载该位置的当前数据并开始同步更改。它将在内存中保留可用数据的副本。

如果您向该位置添加第二个监听器,而第一个监听器仍处于事件状态,Firebase 将不会重新下载数据。我刚刚快速验证了这一点http://jsbin.com/foduxun/edit?js,console .

如果您在附加第二个监听器之前删除第一个监听器,Firebase 将清除其缓存。因此,当您再次附加监听器时,它将重新下载数据。

如果您希望在分离所有监听器后仍保留设备上的数据可用,enable disk persistence :

[Firebase defaultConfig].persistenceEnabled = YES;

关于ios - Firebase 下载相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039742/

相关文章:

iphone - 增加包含 2 个 UILabel 的自定义 UITableViewCell 的大小

ios - 如何更改后退按钮上的文字

swift - 如何在代码中创建 SceneKit SCNSkinner 对象?

javascript - 从 Firebase JavaScript 检索数据

firebase - 动态链接 - 正在发布域和路径前缀。请在 1 个月后重试

iphone - ScrollView 中的图像

ios - 无法设置引用 socket

ios - 仪器:泄漏和分配 (tvOS)

ios - 如何添加约束以将 tableview 固定到其父底部

swift - 尝试从 Firebase 检索数据时未调用 tableView(_ tableView : UITableView, cellForRowAt indexPath: IndexPath) 函数