firebase更新我的表视图时的ios通知

firebase更新我的表视图时的ios通知,ios,firebase,firebase-realtime-database,swift4.1,Ios,Firebase,Firebase Realtime Database,Swift4.1,我想在表视图更新时通知用户。我正在使用firebase,但我希望在tableview更新时收到本地通知。我不知道如何设置tableview更新时的触发器。我读了所有我能读的文件,但我弄不懂。下面链接了我的代码,供我设置通知时参考。我只是不知道如何在tableview更新时添加通知 import UIKit import FirebaseAuth import FirebaseDatabase import UserNotifications class ViewController: UIVi

我想在表视图更新时通知用户。我正在使用firebase,但我希望在tableview更新时收到本地通知。我不知道如何设置tableview更新时的触发器。我读了所有我能读的文件,但我弄不懂。下面链接了我的代码,供我设置通知时参考。我只是不知道如何在tableview更新时添加通知

import UIKit
import FirebaseAuth
import FirebaseDatabase
import UserNotifications

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    var ref: DatabaseReference!
    var databaseHandle:DatabaseHandle?



    var postData = [String]()

    override func viewWillLayoutSubviews() {
        self.navigationController?.isNavigationBarHidden = false
    }



    override func viewDidLoad() {
        super.viewDidLoad()
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: {didAllow, error in
        })


        ref = Database.database().reference()

        tableView.delegate = self
        tableView.dataSource = self
        // Do any additional setup after loading the view, typically from a nib.
        databaseHandle = ref.child("Posts").observe(.childAdded) { (snapshot) in

            let post = snapshot.value as? String

            if let actualPost = post {

            self.postData.append(actualPost)

            self.tableView.reloadData()

            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return postData.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "postCell")
        cell?.textLabel?.text = postData[indexPath.row]
        return cell!
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if (editingStyle == UITableViewCellEditingStyle.delete) {
            // handle delete (by removing the data from your array and updating the tableview)
            Database.database().reference().removeValue()
        }
    }



    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath as IndexPath)?.accessoryType = .checkmark

    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath as IndexPath)?.accessoryType = .none
    }

您的
viewDidLoad
应该如下所示:

override func viewDidLoad() {
    super.viewDidLoad()
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: {didAllow, error in
    })


    ref = Database.database().reference()

    tableView.delegate = self
    tableView.dataSource = self
    // Do any additional setup after loading the view, typically from a nib.
    databaseHandle = ref.child("Posts").observe(.childAdded) { (snapshot) in

        let post = snapshot.value as? String

        if let actualPost = post {

        self.postData.append(actualPost)
        self.tableView.reloadData()

        let content = UNMutableNotificationContent()
        content.title = "Don't forget"
        content.body = "The table view is up to date !"
        content.sound = UNNotificationSound.default()
        content.categoryIdentifier = "UYLReminderCategory"
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.1,
                                                    repeats: false)
        UNUserNotificationCenter.current().add(.init(identifier: "myNot", content: content, trigger: trigger)) { (error) in
             //Your notification completion handler
        }

        }
    }
}
我认为你已经处理了通知授权。 然后,每次Firebase observer触发表视图的新数据时,您都会触发一个通知。

尝试这样做

override func viewDidLoad() {
    super.viewDidLoad()
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: {didAllow, error in
    })
    ref = Database.database().reference()

    tableView.delegate = self
    tableView.dataSource = self
    // Do any additional setup after loading the view, typically from a nib.
    databaseHandle = ref.child("Posts").observe(.childAdded) { (snapshot) in

        let post = snapshot.value as? String

        if let actualPost = post {

            self.postData.append(actualPost)

            self.reload(completion: {
                //local notification here
            })

        }
    }
}

func reload(completion:() -> Void) {
    self.tableView.reloadData()
    completion()
}

您的第二行和第三行代码有一个非常小的格式错误。考虑通过将4个前导空间添加到代码行来格式化它们,谢谢。不错的答案…试着多开发一点。。。也。。。不要复制和粘贴。。。想想解决办法。你不是因为初学者而外包devSorry当在帖子中添加子帖子时,应用程序是后台的?当我添加帖子时,应用程序在后台运行并且允许通知放置断点并观察是否调用通知。我猜哪个firebase观测站在后台时不运行。