swift - 滑动删除重新出现在收藏选项卡中的项目
问题描述
所以我正在尝试从收藏夹选项卡中删除我最喜欢的项目。滑动实现有效,但是当我返回收藏夹选项卡时,删除的项目重新出现。我正在使用核心数据,我知道它不会从核心数据中删除它,但不知道如何修复它。这是我的收藏选项卡文件:
import UIKit
import CoreData
class FavAnimeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
var favorites = [NSManagedObject]()
var numAnime = 0
var managedObjectContext: NSManagedObjectContext!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
// Do any additional setup after loading the view.
}
//loads every time view appears
override func viewDidAppear(_ animated: Bool) {
load()
}
func load() {
//1
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext =
appDelegate.persistentContainer.viewContext
//2
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "Favorite")
//3
do {
favorites = try managedContext.fetch(fetchRequest)
tableView.reloadData()
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return favorites.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "FavTableViewCell") as! FavTableViewCell
let favAnime = favorites[indexPath.row]
cell.favtitleLabel.text = favAnime.value(forKeyPath: "title") as? String
cell.favsumLabel.text = favAnime.value(forKeyPath: "synopsis") as? String
if let poster = favAnime.value(forKey: "poster") as? String{
let posterUrl = URL(string: poster)!
cell.favposterView.af.setImage(withURL: posterUrl)
}
return cell
}
//MARK: Delete favorite items
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
favorites.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
}
如果有任何帮助,那就太好了
解决方案
在保存状态之前,这些更改(在这种情况下Delete
)不会受到影响,有用的是NSManagedObjectContext
,托管对象上下文具有匹配的delete()方法,该方法将删除任何对象,无论其在对象图中的类型或位置如何。一旦从上下文中删除了一个对象,我们就可以调用saveContext()将该更改写回持久存储,以便该更改是永久性的。
do {
try managedObjectContext.save()
} catch (let error) {
print(error.localizedDescription)
}
请记住:当您希望您的更改持续存在时,您必须调用saveContext() 。
我希望我有帮助!
推荐阅读
- javascript - 输入中的自动完成数据
- java - Gradle 任务不接受 Java 用户输入
- python - 在 PyQt5 中删除小部件时如何删除黑色空间
- system-verilog - SystemVerilog 中队列的最大大小是多少?
- node.js - Traefik 仍然需要端口规范
- excel - 如何在工作簿中搜索字符串然后将其写入同一行的列中?
- php - Laravel 调度程序和 docker cron
- excel - 使用 Excel 溢出范围作为递归 Lambda 函数的数据源
- python - 可以重建 2d 矩阵,其中掩码已与 numpy where 一起使用并展平
- makefile - 如何让 make 运行使用 make 变量在其中创建 azure 服务主体的命令