膳食车正在Overriden

时间:2018-05-14 21:58:48

标签: arrays json swift uitableview

我正在开发一款送货应用程序但是,我的购物车遇到了一些麻烦。问题是:每当客户向购物车添加新商品时,购物车中的所有商品都会使用最新商品的名称。它只会覆盖tableView对象并且不会影响我的后端,所以我知道我导入了一些错误。

对于Clarity,我有两个表:我通过JSON引入的产品和产品尺寸:

产品档案:

import Foundation
import SwiftyJSON

class Product {
    //This pulls the information per product. Edit information here and attach to each Restaurant cell.

    var id: Int?
    var name: String?
    var short_description: String?
    var image: String?
    var type: String?
    var size: String?

    init(json: JSON) {
        self.id = json["id"].int
        self.name = json["name"].string
        self.short_description = json["short_description"].string
        self.image = json["image"].string
        self.type = json["course"].string
    }
}

产品尺寸:

import Foundation
import SwiftyJSON

class ProductSize {
    //Label for product information

    var price:Float?
    var sizeId: Int?
    var size: Int?
    var product_id: Int?

    init(json: JSON) {
        self.price = json["price"].float
        self.sizeId = json["id"].int
        self.size = json["size"].int
        self.product_id = json["product_id"].int
    }

膳食从上一个视图控制器传递给我们:

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "cartInfo" {
     
            let controller = segue.destination as! CartController
            controller.product = product
            
        }
    }
    

在购物车控制器中,我显示了购物车中的所有餐点,但它只会反复出现同一餐。

    var product: Product?

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "shoppingCartCell", for: indexPath) as! CartCell

            let cart = Cart.currentCart.items[indexPath.row]
            let pname = product?.name
            cell.lblQty.text = "\(cart.qty)"
            cell.lblTotal.text = "$\(cart.productSize.price! * Float(cart.qty))"
            cell.lblName.text = pname



        return cell

在页面上,输出如下所示:

enter image description here

现在,如果您点了一个汉堡包,然后将芝士汉堡放入您的购物车中,那就会订购两个芝士汉堡。我该怎么做才能显示购物车中所有商品的正确信息?

这是填充所有内容的Tableview:

//Populate products in cart.
extension CartController: UITabBarDelegate, UITableViewDataSource {
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return    Cart.currentCart.items.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "shoppingCartCell", for: indexPath) as! CartCell
        
            let cart = Cart.currentCart.items[indexPath.row]
            let pname = self.product
            cell.lblQty.text = "\(cart.qty)"
            cell.lblTotal.text = "$\(cart.productSize.price! * Float(cart.qty))"
            cell.lblName.text = pname?.name

        
        
        
        return cell

        
    }
    
    
    
    
}

1 个答案:

答案 0 :(得分:0)

重复产品名称只意味着一件事://text()[normalize-space() = 'C1102W']/.. 不是一系列产品,而是一种产品,因此product会一直显示出来。显然,您要在product?.name类中设置product变量,而应该使Cart成为一个数组,然后从前一个视图控制器追加到它。

整个结构令人困惑,也许你会在product

cartproduct混淆