将NSUserDefaults删除到相应的UITableViewCell

问题描述 投票:0回答:1

我正在尝试重新初始化与给定单元格关联的所有数据。

这是我删除单元格的函数(cryptosArray是创建单元格的数组):

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            cryptosArray.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .fade)

            let userDefaults = UserDefaults.standard
            let encodedData : Data = NSKeyedArchiver.archivedData(withRootObject: cryptosArray)
            userDefaults.set(encodedData, forKey: "cryptosArray")
            userDefaults.synchronize()


        }
    }

这是一个函数,可以节省在单元格中存在的textfield中输入的数量:

    func cellAmountEntered(_ walletTableViewCell: WalletTableViewCell, cryptoPrice: String) {

        if walletTableViewCell.amountTextField.text == "" {
            return
        }
        let str = walletTableViewCell.amountTextField.text

        let formatter = NumberFormatter()
        formatter.locale = Locale(identifier: "en_US")
        let dNumber = formatter.number(from: str!)
        let nDouble = dNumber!
        let eNumber = Double(truncating: nDouble)

        walletTableViewCell.amountLabel.text = String(format:"%.8f", eNumber)
        UserDefaults.standard.set(walletTableViewCell.amountLabel.text, forKey: "\(cryptoPrice)Amount")
        walletTableViewCell.amountTextField.text = ""

    }

正如您所看到的,我在用户默认文件中使用walletTableViewCell.amountLabel.text保存"\(cryptoPrice)Amount",其中\(cryptoPrice)是与单元格对应的参数。

删除单元格时如何删除相应的"\(cryptoPrice)Amount"密钥?我无法弄清楚如何将参数传递给commit editingStyle: ..

ios swift uitableview nsuserdefaults
1个回答
1
投票

基本解决方案是:创建一个cryptoPrices数组。每个单元格都应该有一个值。例如,您可以使用全零来初始化数组(如果它适用于您,我不知道)。然后,如果用户输入金额,则从数组中删除零,并在那里删除.insert的新值。因此,当您删除时,您可以通过indexPath.row轻松找到您的密钥。

希望能帮助到你!但请注意:这是一个非常简单的解决方案。

我会这样做:不要将UserDefaults用于此类事情。它不是数据库。最好使用Realm或CoreData。我知道它更难,但有很多教程可以帮助你。祝好运!希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.