У меня есть три tableViewController
, и они управляются tabBarController
. И каждый tabBarItem
должен быть предупрежден о просроченных товарах, подобных любым другим приложениям. В моем первом tableViewController
я попытался показать количество просроченных предметов внутри tabBarItem
's badgeValue
. Эти значения исходят от fetchedResultsController
's fetchedObjects.count
, это хорошо работает.Как правильно обновить значение значка TabBarItem?
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.
Как правильно показать «ы badgeValue
TabBarItem
?
Он достигает даже кода, в котором вы его устанавливаете? Другим вариантом может быть реализация 'controllerDidChangeContent' всякий раз, когда ваша модель изменяется, а затем получить счетчик из вашего' fetchedResultsController' и установить значок на этот номер. – Koen
Когда я добавил новое значение модели и затем исчез. Но снова и снова тот же результат я получу – Mannopson
Пробовал ли вы точку останова на 'viewController.tabBarItem.badgeValue =" "'? Установка badgeValue в 'nil' вместо' '' 'работает в моем проекте. – Koen