我有一个三个tableViewController,它们由tabBarController管理。每个tabBarItem都必须像其他应用程序一样被提醒有关过期项目。在我的第一个tableViewController中,我试图在tabBarItembadgeValue中显示过期项目计数。这些数值来自于其良好的工作状态。

func tabBarBadgeUpdater() {

    for viewController in (self.tabBarController?.viewControllers)! {

        let overdue = self.fetchedResultsController.fetchedObjects?.filter({ (record) -> Bool in
            return (record.date?.compare(Date()) != .orderedDescending)
        })

        print(overdue!.count)

        if viewController.tabBarItem.tag == 1 {

            if overdue!.count != 0 {
                DispatchQueue.main.async(execute: {
                    viewController.tabBarItem.badgeValue = "\(overdue!.count)"
                    viewController.tabBarItem.badgeColor = UIColor.init(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0)
                    self.tableView.reloadData()
                })
            } else {
                DispatchQueue.main.async(execute: {
                    viewController.tabBarItem.badgeValue = ""
                    viewController.tabBarItem.badgeColor = .clear
                    self.tableView.reloadData()
                })
            }
        }
    }
}

但我的问题是删除它们。当我试图从模型中删除最后一个对象时,它仍然显示值1。
swift - 如何正确更新TabBarItem徽章值?-LMLPHP
swift - 如何正确更新TabBarItem徽章值?-LMLPHP
如何正确显示fetchedResultsController'sfetchedObjects.count

最佳答案

我建议您实现controllerDidChangeContent这是您的fetchedResultsController的委托方法。每次您的模型更改时,都会调用它,您可以查询计数并更新您的徽章号码。

关于swift - 如何正确更新TabBarItem徽章值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41941891/

10-10 06:33