Как я могу обновить значения количества в моем словаре IOS Swift

У меня есть массив объектов в моем приложении, который передается другому VC с именем restaurantViewController, значение сохраняется в restMenu, и теперь проблема заключается в том, что всякий раз, когда я прокручиваю UITableView, значение ItemQuantityCell всегда повторно используется до 0, что является значением по умолчанию в моем restMenu. Как я могу обновить значение в моем restMenu, чтобы я мог передать его в checkoutVC с правильным значением для моего ItemQuantityCell. мой список того, откуда поступают данные, выглядит следующим образом

ResturantFile.plist

вот мой код

var restMenu = [[String:Any]]()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! RestaurantItemViewCell

    cell.delegate = self as? TableViewCellDelegate

    cell.selectionStyle = UITableViewCellSelectionStyle.none

    //assign item name to cell
    let selectedDictName = restMenu[indexPath.row] as NSDictionary
    print("the selected dict ", selectedDictName)
    cell.itemNameLabel.text = selectedDictName.value(forKey: "ItemName") as? String

    // assign item price to cell
    let selectedDictPrice = restMenu[indexPath.row] as NSDictionary
    cell.itemPriceLabel.text = "Price: \(selectedDictPrice.value(forKey: "ItemPrice") as! String)"

    // assign item quantity to cell
    let selectedDictQuant = restMenu[indexPath.row] as NSDictionary
    cell.itemQuantityLabel.text = selectedDictQuant.value(forKey: "ItemQuant") as? String

}

1 ответ

Решение

Согласно вашему списку, ItemQuant всегда равен нулю, и вы присваиваете одно и то же значение в cell.itemQuantityLabel.text так что всегда будет ноль.

Далее, пожалуйста, внесите изменения в ваш код, не используйте NSStuff в Swift.

Обновите свой cellForRowAt indexPath как ниже

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! RestaurantItemViewCell
    cell.delegate = self as? TableViewCellDelegate
    cell.selectionStyle = UITableViewCellSelectionStyle.none

    //assign item name to cell
    let dict = restMenu[indexPath.row]
    print("the selected dict ", dict)

    cell.itemNameLabel.text = dict["ItemName"] as! String
    cell.itemPriceLabel.text = dict["ItemPrice"] as! String
    cell.itemQuantityLabel.text = dict["ItemQuant"] as! String

    return cell
}

Надеюсь, что это работает для вас.

FYI. Выше код не проверен. Это только для справки.

Примечание. Везде, где вы хотите обновить количество товара. Получите индекс, по которому вы хотите обновить количество, и выполните следующие действия.

restMenu[index]["ItemQuant"] = "2" // index is you will get somehow & 2 is just for example you can do what you want there.

ОБНОВИТЬ

Согласно вашему последнему комментарию, это предложение.

Вместо структуры словаря создайте соответствующие классы моделей и проанализируйте список, ваш cellForRowAt indexPath будет изменен, Ваш ItemQuant должен иметь значение Int. Пройти restMenu возражать против других ViewController и обновить его ItemQuant. Если вы вернетесь назад, просто перезагрузите данные таблицы. Он покажет вам изменения в ItemQuant.

Другие вопросы по тегам