将NSUserDefaults删除到相应的UITableViewCell

时间:2018-03-01 22:05:52

标签: ios swift uitableview nsuserdefaults

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

这是我删除单元格的函数(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"保存在UserDefaults文件中,其中\(cryptoPrice)是与该单元格对应的参数。

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

1 个答案:

答案 0 :(得分:1)

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

希望它有所帮助!但请注意:这是一个非常直接的解决方案。

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