我在swift中使用firebase,我在viewDidAppear中调用监听器:并且因为它在文档中写入它应该再次下载相同的数据但现在每次出现视图时都会显示相同的数据。
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)
}
}
答案 0 :(得分:0)
如果您将第一个侦听器添加到某个位置,Firebase将下载该位置的当前数据并开始同步更改。它将保留内存中可用数据的副本。
如果您向该位置添加第二个侦听器,而第一个仍处于活动状态,则Firebase不会重新下载该数据。我刚刚快速验证了这个http://jsbin.com/foduxun/edit?js,console。
如果在之前删除第一个侦听器,则附加第二个侦听器,Firebase将清除其缓存。那么当你再次附加一个监听器时,它将重新下载数据。
如果您希望在分离所有听众之后保持设备上的数据可用,enable disk persistence:
[Firebase defaultConfig].persistenceEnabled = YES;