Nano Hash - криптовалюты, майнинг, программирование

Firebase запущен в автономном режиме, не запускает osberve* для дочерних значений

Я использую firebase с приложением, запущенным в автономном режиме, когда я подписываюсь на дочерние значения некоторого узла, обратный вызов из observe*(_:,withBlock:) не срабатывает (ни для начальных значений, ни для изменений). Подписки на прямые значения (без детей) работают нормально. Взгляните на фрагмент:

    let database = FIRDatabase.database()
    database.reference().keepSynced(true)
    let databaseRef = database.reference()
    database.goOffline()


    databaseRef.child("user").setValue("user1")
    let userKey = databaseRef.child("usr").childByAutoId().key
    let userValues = ["uid": "uid",
                      "name" : "name",
                      "surname" : "surname"]
    databaseRef.child("/usr/\(userKey)/").setValue(userValues)

    //1
    databaseRef.child("user").observeSingleEventOfType(.Value, withBlock:{ snap in
        print("works")
    })
    //2
    databaseRef.child("usr").observeSingleEventOfType(.Value, withBlock:{ snap in
        print("doesnt work")
    })
    //3
    databaseRef.child("usr/\(userKey)/uid").observeSingleEventOfType(.Value, withBlock:{ snap in
        print("works")
    })`

подписки 1 и 2 работают нормально, но подписка 2 не сработает, пока хотя бы один раз база данных не будет подключена к сети. С момента синхронизации базы данных с удаленным я могу выйти в автономный режим, и все работает как надо. Кто-нибудь знает, как справиться с этой проблемой?


Ответы:


1

Когда ваше приложение находится в автономном режиме, клиент Firebase будет запускать события из своего кеша. Если ваше приложение никогда не подключалось к серверам Firebase, этот кеш будет пуст.

Это означает, что клиент Firebase не знает, существует ли значение в запрашиваемом вами месте. По этой причине он не будет запускать событие.

09.06.2016
  • Спасибо за ответ. Если это так, то почему событие запускается для случаев 1 и 2 во фрагменте, где я ссылаюсь на одно значение вместо дочернего узла? 10.06.2016
  • Номер 3 срабатывает, потому что вы установили значение этого местоположения в своем собственном коде. Таким образом, кеш Firebase имеет значение для этого узла. Я думаю, то же самое относится и к вашему первому тесту, но я не уверен. 10.06.2016
  • Для каждого случая я устанавливаю значение - 1: значение user1 для пользователя узла, для второго я устанавливаю дочерний узел со значениями для узла usr, для третьего я устанавливаю одно значение в дочернем узле для узла usr. До сих пор не понимаю, почему за 2-го даже не увольняют. Обратите внимание, что если я выйду хотя бы один раз в сеть, я смогу без проблем работать в автономном режиме, эти 3 теста запускаются нормально - опять же, если я удалю приложение и начну заново в автономном режиме, возникнет проблема. 10.06.2016
  • @FrankvanPuffelen В моем случае я показываю представление загрузки перед вызовом observe и скрываю это представление, как только попадаю в закрытие. Как я могу остановить загрузку, если закрытие никогда не срабатывает? 21.02.2017
  • У меня проблема с updateChildValues ​​- по какой-то причине он не срабатывает. Иногда получается, иногда нет. Логов нет. Есть ли способ определить, считает ли он, что он находится в автономном режиме, и переключить его 22.09.2017

  • 2

    У меня была аналогичная проблема, но я использовал глубокие ссылки с updateChildValues, что каким-то образом приводило к тому, что локальный кеш не запускал события на промежуточных (/path/intermediate/otherpath) ключах. Обходной путь, который я нашел, заключался в том, чтобы быть более подробным в словаре, который я передал updateChildValues. (Я все еще считаю, что это ошибка в Firebase SDK).

    См. этот вопрос о переполнении стека

    16.09.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..