У меня есть 2 UIViewControllers: ProductsVC и CartVC. В CartVC у меня есть функция, которая удаляет все мои товары из моей корзины.
Что я хочу сделать, так это когда я нахожусь в ProductsVC и удаляю продукт из CoreData, чтобы затем очистить все свои продукты от второго VC, который является CartVC. Поэтому мне нужно сказать, чтобы эта функция выполнялась там.
Вот мой код:
// First VC
class ProductsViewController: UIViewController{
// Function to delete a Product from the table view and also from CoreData
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
let productEntity = Constants.productEntity
let managedContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let product = productsArray[indexPath.row]
// ----------- HERE I NEED TO TELL TO "clearAllProducts()" to be executed in the CartVC so when I click on the Cart button, there will be 0 products.
if editingStyle == .delete {
managedContext.delete(product)
do {
try managedContext.save()
} catch let error as NSError {
print(Constants.errorDeletingProduct + "\(error.userInfo)")
}
}
// fetch new data from DB and reload products table view
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: productEntity)
do {
productsArray = try managedContext.fetch(fetchRequest) as! [Product]
} catch let error as NSError {
print(Constants.errorFetchingData + "\(error.userInfo)")
}
productsTableView.reloadData()
}
}
// Second VC
class CartViewController: UIViewController {
// Clear all products from the cart
@IBAction func clearAllProducts(_ sender: Any) {
// Reset Cart tableView
productsInCartArray = [Product]()
productPricesArray = [Float]()
totalSum = 0
self.tabBarController?.tabBar.items?[1].badgeValue = String(0)
// Remove selected products from ProductsViewController
((self.tabBarController?.viewControllers![0] as! UINavigationController).topViewController as! ProductsViewController).selectedProductsArray = [Product]()
((self.tabBarController?.viewControllers![0] as! UINavigationController).topViewController as! ProductsViewController).priceForSelectedProductsArray = [Float]()
((self.tabBarController?.viewControllers![0] as! UINavigationController).topViewController as! ProductsViewController).counterItem = 0
((self.tabBarController?.viewControllers![0] as! UINavigationController).topViewController as! ProductsViewController).numberOfProductsInCartLabel.text = String(0)
UIApplication.shared.applicationIconBadgeNumber = 0
cartTableView.reloadData()
}
}
Вот картинка, чтобы понять, почему я хочу это сделать:
Спасибо, что уделили время!