Подтвердить что ты не робот

Событие значения Firebase не запускается все время в автономном режиме

У меня есть следующий шаблон пути:

/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())
    })
4b9b3361

Ответ 1

Я уверен, но, пожалуйста, попробуйте ниже. Возможно, вы будете работать.

guard let startTimestamp = day.beginning(из:.day)?. timeIntervalSince1970, let endTimestamp = 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(.ChildAdded, 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())
})

Ответ 2

Посмотрите на этот документ: FIRDataEventTypeValue

Вы можете использовать событие FIRDataEventTypeValue для чтения данных по заданному пути, как это существует во время события

Надеюсь, это поможет вам.