Ios Firebase数据库中的Firebase ServerValue.timestamp()不断更改

Ios Firebase数据库中的Firebase ServerValue.timestamp()不断更改,ios,swift,xcode,firebase-realtime-database,Ios,Swift,Xcode,Firebase Realtime Database,我正在尝试将ServerValue.timestamp()的实例添加到我的firebase数据库中,当我运行应用程序时,时间戳不断增加。下面是代码,我不知道如何阻止firebase中的时间戳增加 这是我的自定义类和tableview类 class Story { var text: String = "" var timestamp: String = "" let ref: DatabaseReference! init(text: String) {

我正在尝试将ServerValue.timestamp()的实例添加到我的firebase数据库中,当我运行应用程序时,时间戳不断增加。下面是代码,我不知道如何阻止firebase中的时间戳增加

这是我的自定义类和tableview类

    class Story
{
    var text: String = ""
    var timestamp: String = ""
    let ref: DatabaseReference!

    init(text: String) {
        self.text = text

        ref = Database.database().reference().child("People").child("HomeFeed").child("Posts").childByAutoId()

    }


    init(snapshot: DataSnapshot)
    {
       ref = snapshot.ref


        if let value = snapshot.value as? [String : Any] {

         text = value["Post"] as! String


            ref.updateChildValues(["timestamp":ServerValue.timestamp()])

            let id = ref.key

            Database.database().reference().child("People").child("HomeFeed").child("Posts").child("\(id)").child("timestamp").observeSingleEvent(of: .value) { (snapshot) in


                let dope = snapshot.value as! Double

                let x = dope / 1000
                let date = NSDate(timeIntervalSince1970: x)
                let formatter = DateFormatter()
                formatter.dateStyle = .long
                formatter.timeStyle = .medium
                DispatchQueue.main.async {
                    self.timestamp = formatter.string(from: date as Date)

                    self.timestamp = "\(value["timestamp"])"

                }

            }

                }

    }

        func save() {
       ref.setValue(toDictionary())

    }

    func toDictionary() -> [String : Any]
    {
        return [
            "Post" : text,
            "timestamp" : timestamp
        ]
    }
}
class TableViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {

    let databaseRef = Database.database().reference()
    @IBOutlet weak var tableView: UITableView!
   var rub: StorageReference!
    @IBAction func createpost(_ sender: Any) {
        self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("ProfilePic").observe(DataEventType.value) { (snapshot) in
            let profpic = snapshot.value as? String

            self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("Full Name").observe(DataEventType.value) { (snapshot) in        }
            let fullname = snapshot.value as? String

            if profpic == nil && fullname == nil {
                let alert = UIAlertController(title: "Need to create profile", message: nil, preferredStyle: UIAlertControllerStyle.alert)
                alert.addAction(UIAlertAction(title: "To create profile", style: UIAlertActionStyle.default, handler: { action in self.performSegue(withIdentifier: "ToCreateprof", sender: nil)}))
                alert.addAction(UIAlertAction(title: "Dissmiss", style: UIAlertActionStyle.default, handler: nil))

                // show the alert
                self.present(alert, animated: true, completion: nil)

            }else {
                self.performSegue(withIdentifier: "ToPost", sender: nil)
            }

        }        //if no prof pic and name, no posting

    }
    @IBAction func toCreateorprofile(_ sender: Any) {
        self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("ProfilePic").observe(DataEventType.value) { (snapshot) in
            let profpic = snapshot.value as? String

            self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("Full Name").observe(DataEventType.value) { (snapshot) in        }
                let fullname = snapshot.value as? String

            if profpic != nil && fullname != nil {
                self.performSegue(withIdentifier: "olduser", sender: nil)
            }else {
                self.performSegue(withIdentifier: "ToCreateprof", sender: nil)
            }

            }

    }


    let storiesRef = Database.database().reference().child("People").child("HomeFeed").child("Posts")
    var stories = [Story]()

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        // download stories
        storiesRef.observe(.value, with: { (snapshot) in



            self.stories.removeAll()

            for child in snapshot.children {


                let childSnapshot = child as! DataSnapshot


                let story = Story(snapshot: childSnapshot)
                self.stories.insert(story, at: 0)
            }

           self.tableView.reloadData()

        })


    }



    @objc func handleRefresh(_ refreshControl: UIRefreshControl) {


        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }

    lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action:
            #selector(TableViewController.handleRefresh(_:)),
                                 for: UIControlEvents.valueChanged)
        refreshControl.tintColor = UIColor.purple

        return refreshControl
    }()


    override func viewDidLoad()
    {
        super.viewDidLoad()



        self.tableView.reloadData()

        self.tableView.addSubview(self.refreshControl)
        tableView.delegate = self
        tableView.dataSource = self
        self.tableView.estimatedRowHeight = 92.0
        self.tableView.rowHeight = UITableViewAutomaticDimension


    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    // MARK: - Table view data source

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {

        return stories.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Story Cell", for: indexPath) as! StoryTableviewcell
        let story = stories[indexPath.row]

        cell.story = story
        self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("Full Name").observe(.value) { (snapshot) in
            let name = snapshot.value as? String
            if name != nil {

                cell.fullnamepost.text = name

            }

        }


        rub = Storage.storage().reference().storage.reference(forURL:"gs://people-3b93c.appspot.com").child("ProfilePic").child(Auth.auth().currentUser!.uid)

        if rub != nil {

        // Create a UIImage, add it to the array
        rub.downloadURL(completion: { (url, error) in

            if error != nil {
                print(error?.localizedDescription as Any)
                return
            }

            URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in

                if error != nil {
                    print(error as Any)
                    return
                }

                guard let imageData = UIImage(data: data!) else { return }

                DispatchQueue.main.async {
                    cell.profimage.image = imageData
                }

            }).resume()

        })
        }

        return cell
    }



}
这是tableview类

    class Story
{
    var text: String = ""
    var timestamp: String = ""
    let ref: DatabaseReference!

    init(text: String) {
        self.text = text

        ref = Database.database().reference().child("People").child("HomeFeed").child("Posts").childByAutoId()

    }


    init(snapshot: DataSnapshot)
    {
       ref = snapshot.ref


        if let value = snapshot.value as? [String : Any] {

         text = value["Post"] as! String


            ref.updateChildValues(["timestamp":ServerValue.timestamp()])

            let id = ref.key

            Database.database().reference().child("People").child("HomeFeed").child("Posts").child("\(id)").child("timestamp").observeSingleEvent(of: .value) { (snapshot) in


                let dope = snapshot.value as! Double

                let x = dope / 1000
                let date = NSDate(timeIntervalSince1970: x)
                let formatter = DateFormatter()
                formatter.dateStyle = .long
                formatter.timeStyle = .medium
                DispatchQueue.main.async {
                    self.timestamp = formatter.string(from: date as Date)

                    self.timestamp = "\(value["timestamp"])"

                }

            }

                }

    }

        func save() {
       ref.setValue(toDictionary())

    }

    func toDictionary() -> [String : Any]
    {
        return [
            "Post" : text,
            "timestamp" : timestamp
        ]
    }
}
class TableViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {

    let databaseRef = Database.database().reference()
    @IBOutlet weak var tableView: UITableView!
   var rub: StorageReference!
    @IBAction func createpost(_ sender: Any) {
        self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("ProfilePic").observe(DataEventType.value) { (snapshot) in
            let profpic = snapshot.value as? String

            self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("Full Name").observe(DataEventType.value) { (snapshot) in        }
            let fullname = snapshot.value as? String

            if profpic == nil && fullname == nil {
                let alert = UIAlertController(title: "Need to create profile", message: nil, preferredStyle: UIAlertControllerStyle.alert)
                alert.addAction(UIAlertAction(title: "To create profile", style: UIAlertActionStyle.default, handler: { action in self.performSegue(withIdentifier: "ToCreateprof", sender: nil)}))
                alert.addAction(UIAlertAction(title: "Dissmiss", style: UIAlertActionStyle.default, handler: nil))

                // show the alert
                self.present(alert, animated: true, completion: nil)

            }else {
                self.performSegue(withIdentifier: "ToPost", sender: nil)
            }

        }        //if no prof pic and name, no posting

    }
    @IBAction func toCreateorprofile(_ sender: Any) {
        self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("ProfilePic").observe(DataEventType.value) { (snapshot) in
            let profpic = snapshot.value as? String

            self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("Full Name").observe(DataEventType.value) { (snapshot) in        }
                let fullname = snapshot.value as? String

            if profpic != nil && fullname != nil {
                self.performSegue(withIdentifier: "olduser", sender: nil)
            }else {
                self.performSegue(withIdentifier: "ToCreateprof", sender: nil)
            }

            }

    }


    let storiesRef = Database.database().reference().child("People").child("HomeFeed").child("Posts")
    var stories = [Story]()

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        // download stories
        storiesRef.observe(.value, with: { (snapshot) in



            self.stories.removeAll()

            for child in snapshot.children {


                let childSnapshot = child as! DataSnapshot


                let story = Story(snapshot: childSnapshot)
                self.stories.insert(story, at: 0)
            }

           self.tableView.reloadData()

        })


    }



    @objc func handleRefresh(_ refreshControl: UIRefreshControl) {


        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }

    lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action:
            #selector(TableViewController.handleRefresh(_:)),
                                 for: UIControlEvents.valueChanged)
        refreshControl.tintColor = UIColor.purple

        return refreshControl
    }()


    override func viewDidLoad()
    {
        super.viewDidLoad()



        self.tableView.reloadData()

        self.tableView.addSubview(self.refreshControl)
        tableView.delegate = self
        tableView.dataSource = self
        self.tableView.estimatedRowHeight = 92.0
        self.tableView.rowHeight = UITableViewAutomaticDimension


    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    // MARK: - Table view data source

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {

        return stories.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Story Cell", for: indexPath) as! StoryTableviewcell
        let story = stories[indexPath.row]

        cell.story = story
        self.databaseRef.child("ProfileInfo").child(Auth.auth().currentUser!.uid).child("Full Name").observe(.value) { (snapshot) in
            let name = snapshot.value as? String
            if name != nil {

                cell.fullnamepost.text = name

            }

        }


        rub = Storage.storage().reference().storage.reference(forURL:"gs://people-3b93c.appspot.com").child("ProfilePic").child(Auth.auth().currentUser!.uid)

        if rub != nil {

        // Create a UIImage, add it to the array
        rub.downloadURL(completion: { (url, error) in

            if error != nil {
                print(error?.localizedDescription as Any)
                return
            }

            URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in

                if error != nil {
                    print(error as Any)
                    return
                }

                guard let imageData = UIImage(data: data!) else { return }

                DispatchQueue.main.async {
                    cell.profimage.image = imageData
                }

            }).resume()

        })
        }

        return cell
    }



}

您是否正在尝试记录故事创建的时间戳@Sirius请你把问题中的代码整理一下好吗?就像删除所有额外的条目一样。当一个故事被创建时,我想将时间戳保存到firebase,故事是否一直在被创建?在firebase中,时间戳一直在上升