У меня есть представление коллекции, сгенерированное из массива пользовательских объектов, где каждая ячейка представляет счетчик со значением, которое можно обновить с помощью кнопок "+" и "-".
Когда я обновляю это значение с помощью кнопок, оно изменяется визуально, но не сохраняется в массиве, поэтому при перезапуске приложения у меня появляется старшее количество, которое раньше менялось с помощью кнопок
var data: [CounterModel] = []
это мой массив в моем ViewController.swift
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CounterCell", for: indexPath) as! CounterCell
cell.configure(with: data[indexPath.row])
return cell
}
здесь я настраиваю свою ячейку
public func configure(with model: CounterModel) {
nameLabel.text = model.name
amountLabel.text = String(model.amount)
}
@IBAction func lessBtnTapped(_ sender: Any) {
newAmount = Int(amountLabel.text!)
if (newAmount == 0) {
amountLabel.text = "\(newAmount!)"
} else {
amountLabel.text = "\(newAmount! - 1)"
}
}
@IBAction func moreBtnTapped(_ sender: Any) {
newAmount = Int(amountLabel.text!)
amountLabel.text = "\(newAmount! + 1)"
}
здесь я настраиваю свою ячейку и выполняю изменения значения (в CounterCell.swift)
struct CounterModel: Codable {
var name: String
var amount: Int
}
это моя CounterModel
РЕДАКТИРОВАТЬ (с отсутствующей информацией)
Я кодирую свои счетчики в Json и сохраняю их по умолчанию:
func saveUserDefaults(counters: [CounterModel]) {
let defaults = UserDefaults.standard
let jsonEncoder = JSONEncoder()
let jsonData = try? jsonEncoder.encode(counters)
defaults.set(jsonData, forKey: "savedCounters")
}
func loadUserDefaults() -> [CounterModel] {
let defaults = UserDefaults.standard
var savedCounters: [CounterModel] = []
guard let jsonData = defaults.object(forKey: "savedCounters") as? Data else { return savedCounters}
let jsonDecoder = JSONDecoder()
savedCounters = try! jsonDecoder.decode([CounterModel].self, from: jsonData)
return savedCounters
Я обновляю свои Userdefaults в AlertAction, когда создаю новый счетчик
let newCounter: CounterModel = CounterModel(name: self.newLabelValue!, amount: self.newAmountValue!)
self.data.append(newCounter)
saveUserDefaults(counters: self.data)
self.data = loadUserDefaults()
self.collectionView.reloadData()