我正在使用Swift和Firebase进行有关共享笔记的应用程序。
一旦我加载了显示注释的视图,就会在每个行的表格视图中填充注释信息:
为此,我首先查询以查找用户所遵循的注释的ID,然后从每个ID中获取另一个查询的注释信息。
override func viewDidLoad() {
super.viewDidLoad()
listOfNotes.removeAll()
//QUERY NOTES IDs IN USER
let userRef = ref.childByAppendingPath("users/" + sessionUserID + "/participating")
userRef.queryOrderedByValue().observeEventType(.ChildAdded, withBlock: { snapshot in
//Saving note ID
let savingNoteID = snapshot.key
let notesDetailsRef = ref.childByAppendingPath("notes/" + savingNoteID + "/details")
self.dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
notesDetailsRef.observeEventType(.Value, withBlock: { snapshot2 in
let fireNoteTitle = snapshot2.value.objectForKey("noteTitle")! as! String
let fireNoteText = snapshot2.value.objectForKey("noteText")! as! String
let fireNoteUpdatedToConvert = snapshot2.value.objectForKey("noteUpdate")! as! String
let fireNoteUpdatedConverted = self.dateFormatter.dateFromString(fireNoteUpdatedToConvert)
let newNote = NoteInfo(noteID: savingNoteID as String, noteTitle: fireNoteTitle , noteUsers: "Users" as String, noteText: fireNoteText as String, noteUpdated: fireNoteUpdatedConverted!)
listOfNotes.append(newNote)
self.tableNotes.reloadData()
})
})
}
然后,选择一行我将转到一个新VC,以查看注释中的信息。
稍后,当我离开笔记视图返回列表时,在viewWillDisappear
中,我更新了noteinfo:
ref.updateChildValues([
"notes/" + sessionNoteID + "/details/noteText": texto,
"notes/" + sessionNoteID + "/details/noteTitle": title,
"notes/" + sessionNoteID + "/details/noteCreator" : fireNoteCreator,
"notes/" + sessionNoteID + "/details/noteCreation" : fireNoteCreation,
"notes/" + sessionNoteID + "/details/noteUpdate" : String(NSDate())])
以前选择的备注重复出现: (你知道为什么会发生这种情况吗?如果我删除了更新,或者我只是加载了NoteID而不是详细信息,那就完美了。)
谢谢!
答案 0 :(得分:3)
这似乎没有重复,似乎另一个音符被添加到数组中;时间戳不同。
当您向节点(.Value)添加观察者时,它会使用初始数据触发一次,并且每次数据更改时都会触发。
在这种情况下,如果您更新数据,将调用该块,并添加一个带有新时间戳的“新”注释。