У меня есть следующий шаблон пути:
/ID_Company/boxes/timestamp_of_the_day/ID_box
Скажем, я только что начал новый день, и я в сети. Прямо сейчас в Firebase DB путь /ID_Company/boxes/timestamp_of_TODAY
не существует, ни в кеше.
Нет. Я добавляю новое поле в путь /ID_Company/boxes/timestamp_of_TODAY/id_box1
Если у меня есть наблюдатель в событии childAdded
, он будет запущен. Но если у меня есть наблюдатель на событии value
, ничего не запускается.
Теперь позвольте сказать, что я был в сети, когда я добавил первый ящик. Итак, на firebase этот путь /ID_Company/boxes/timestamp_of_TODAY/id_box1
существует и поэтому локально.
Он отключается. И я добавляю новый флажок в /ID_Company/boxes/timestamp_of_TODAY/id_box2
, тогда срабатывает событие value и я просто не понимаю, почему.
Почему это срабатывает, когда timestamp_of_TODAY
уже существует, но не тогда, когда он этого не делает?
Спасибо за вашу помощь.
EDIT:
Вот как я добавляю окно:
guard let startingTimestamp = date.beginning(of: .day)?.timeIntervalSince1970 else { return nil }
let boxRef = dbRef.child("ID_Company").child("boxes").child("\(startingTimestamp)").childByAutoId()
var box = box
box.id = boxRef.key
boxRef.setValue(box.toDictionary()) { error, ref in
if let error = error as? NSError {
print(error)
completion(error)
} else {
completion(nil)
}
}
И вот как я получаю коробки:
guard let startingTimestamp = day.beginning(of: .day)?.timeIntervalSince1970, let endingTimestamp = day.end(of: .day)?.timeIntervalSince1970 else { return nil }
let boxesRef = dbRef.child("ID_Company").child("boxes").child("\(startingTimestamp)")
let query = boxesRef.queryOrdered(byChild: Box.Key.dateTimestamp.rawValue).queryStarting(atValue: startingTimestamp).queryEnding(atValue: endingTimestamp + 0.001)
let handle = query.observe(.value, with: { snapshot in
var boxes: [Box] = []
for child in snapshot.children {
let box = Box(snapshot: child as! FIRDataSnapshot)
if userID == nil || box.userID == userID! {
boxes.append(box)
}
}
completion(boxes.reversed())
})