删除UITableViewCell时如何清除对应的NSUserDefaults数据
解决UITableViewCell删除时清除对应UserDefaults数据的问题
其实很简单,你只需要在删除单元格的逻辑里,先拿到对应单元格的cryptoPrice,然后用这个值构造出之前存数据的键,再从UserDefaults里删掉这个键值对就行。具体步骤如下:
在删除函数中获取对应crypto的price值
找到你的tableView(_:commit:forRowAt:)方法,在删除数组元素之前,先通过indexPath拿到要删除的那个crypto对象,提取出它的cryptoPrice——这个值必须和你保存数据时用的完全一致,不然会找不到对应的键哦。构造要删除的UserDefaults键并移除
用拿到的cryptoPrice拼接成你之前用的键"\(cryptoPrice)Amount",然后调用UserDefaults.standard.removeObject(forKey:)方法删掉这个键值对,必要的话可以调用synchronize()确保修改立即生效(iOS10+之后这个方法不是必须,但某些场景下能避免延迟)。正常执行删除数组元素和刷新表格的逻辑
给你个完整的代码示例(你可以根据自己的实际代码调整):
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { // 第一步:获取要删除的crypto对应的price let targetCrypto = cryptosArray[indexPath.row] let cryptoPrice = targetCrypto.price // 这里根据你的模型属性调整,确保和保存时的取值一致 // 第二步:构造键并移除UserDefaults中的数据 let amountKey = "\(cryptoPrice)Amount" UserDefaults.standard.removeObject(forKey: amountKey) UserDefaults.standard.synchronize() // 可选,按需添加 // 第三步:删除数组元素并刷新表格 cryptosArray.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .fade) } }
另外提个小建议:如果你的crypto对象有唯一不变的标识(比如id),用id来作为键的一部分会比price更可靠——毕竟price可能会随着行情变动,万一之后price变了,你再想找对应的键就找不到啦。不过如果你的业务逻辑里price是唯一且固定的,那用price完全没问题。
内容的提问来源于stack exchange,提问作者Wizzardzz
相关产品推荐
相关产品推荐

