Как получить значения счетчика, когда изменения происходят в FireBase DataBase с использованием Swift? - PullRequest
0 голосов
/ 08 мая 2018

Я новичок в Swift Programming и FireBase, я реализовал приложение чата, в котором я сохранил счетчик сообщений, используя идентификатор отправителя и получателя, на стороне получателя получаю счет отлично, но когда добавляется новый счетчик в FireBase, я хочу получить это новый счет, для этого я использовал таймер для вызова функции каждые 10 секунд, я получаю счет отлично, но моя проблема в том, что таймер работает постоянно, приложение зависает и медленно, после того, как иногда я не отвечаю, кто-нибудь может подсказать мне, как вызывайте функцию каждые 10 секунд или как использовать таймер.

Здесь я попробовал этот код,

var timer = Timer()
 override func viewWillAppear(_ animated: Bool) {
        MessageCountingFunction()
    }
   func MessageCountingFunction(){
        //getting count details
        keyvalue.removeAllObjects()
    countarray.removeAllObjects()
        let ref = FIRDatabase.database().reference()
        ref.child("CountDetails").child(AuthManager.User.id.value).observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in
            if let cakeSnapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
                for cakes in cakeSnapshot {
                    print(cakes)
                    if let cakeDictionary = cakes.value as? Dictionary <String, Any> {
                        print(cakeDictionary)
                        let count = cakeDictionary["Count"]
                        let key = cakes.key as String
                        //your class that takes a key as String and a Dictionary
                        print(count as Any)
                        print(key)
                        self.keyvalue.add(key)
                        self.countarray.add(count!)

                    }
                }
                DispatchQueue.global().sync {
                    print(self.keyvalue)
                    print(self.countarray)
                    self.tableView.reloadData()
                }
            }

        })
    DispatchQueue.main.async {
        self.timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(self.MessageCountingFunction), userInfo: nil, repeats: true)
    }

    }

1 Ответ

0 голосов
/ 08 мая 2018

Моя структура данных json для нового сообщения: -

  1. {"status": "sent", "sender": "ayush", "timeStamp": 1525760473513}

мы сохраняем статусный ключ для проверки нового сообщения. после прочтения мы обновляем значение статусного ключа для чтения и ищем отправленный статус для нового сообщения.

var channelRef: DatabaseReference =   Database.database().reference().child(FIREBASE_CONSULTATION_DBKEY)     

channelRef.child("channelKey").observe(DataEventType.value, with: { (snapshot) -> Void in // 1
        if let channelData = snapshot.value as? Dictionary<String, AnyObject>{ // 2
            let id = snapshot.key
            self.chatMessageArray.removeAll()
            for (key,obj) in channelData{
               if status == "Sent"{


                }
            }
         }
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...