2017-09-19 1 views
0

Dans mon application j'ai besoin d'afficher la valeur du badge en fonction du nombre d'éléments du panier et j'ai implémenté les lignes ci-dessous dans le contrôleur de vue dont j'obtiens les données avec json et la valeur du badge ne se chargeait pas et ne pas mettre à jour la valeur après la suppression et la valeur du badge ne s'affichait pas au début de l'application car je suis nouveau à swift 3 je ne sais pas où l'implémenter quelqu'un peut-il m'aider à résoudre le problème?comment mettre à jour la valeur du badge lors du chargement de l'application?

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

func downloadJsonWithURL() { 
     let url = NSURL(string: urlString) 
     URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in 
      if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary { 
       // print(jsonObj!.value(forKey: "Detail")) 
      self.itemsArray = (jsonObj!.value(forKey: "Detail") as? [[String: AnyObject]])! 
       print(self.itemsArray.count) 
       OperationQueue.main.addOperation({ 
        self.tableDetails.reloadData() 
        let key = "productPrice" 
        for array in self.itemsArray{ 
         if let value = array[key] { 
          let cart = String(describing: value) 
          let endIndex = cart.index(cart.endIndex, offsetBy: -2) 
          let truncated = cart.substring(to: endIndex) 
          self.totalcartPrice.append(truncated) 
          print(self.totalcartPrice) 
          var sum = 0.00 
          for numbers in self.totalcartPrice{ 
           sum += Double(numbers)! 
          } 
          print(sum) 
          self.increment = Int(sum) 
          self.total = String(sum) + "0KD" 
          let tabItems = self.tabBarController?.tabBar.items as NSArray! 
          let tabItem = tabItems?[1] as! UITabBarItem 
          self.appDelegate.badgeValue = String(Int(self.itemsArray.count)) 
         } 
        } 
       }) 
      } 
     }).resume() 
    } 
func deleteButtonAction(button : UIButton) { 
     let buttonPosition = button.convert(CGPoint(), to: tableDetails) 
     let index = tableDetails.indexPathForRow(at: buttonPosition) 
     self.itemsArray.remove(at: (index?.row)!) 
     self.tableDetails.deleteRows(at: [index!], with: .automatic) 
     tableDetails.reloadData() 
     let tabItems = self.tabBarController?.tabBar.items as NSArray! 
     let tabItem = tabItems?[1] as! UITabBarItem 
     self.appDelegate.badgeValue = String(Int(self.itemsArray.count)) 
     if (tableView(tableDetails, numberOfRowsInSection: 0) == 0){ 
      tableDetails.isHidden = true 
      emptyView.isHidden = false 
     } 
    } 

Répondre

1

Vous devez obtenir rootViewController pour mettre à jour le badge depuis AppDelegate. Comme ceci

let rootViewController = self.window?.rootViewController as!UITabBarController! 
let tabArray = rootViewController?.tabBar.items as NSArray! 
let tabItem = tabArray.objectAtIndex(1) as! UITabBarItem 
tabItem.badgeValue = "34" 
+0

comment passer la valeur à cette classe? –

+0

vous pouvez essayer ceci pour passer la valeur https://stackoverflow.com/questions/15049924/passing-data-from-app-delegate-to-view-controller –

+0

ce lien est pour passer des données de l'application délégué pour voir le contrôleur, mais ici J'ai besoin d'envoyer les données du contrôleur de vue au délégué de l'application est-ce le même processus que j'ai besoin d'utiliser? @Vinod Kumar –