swift - UITableView内容删除后没有被删除? [Swift 3.0 - Xcode 8]

标签 swift xcode uitableview core-data delete-row

我试图删除 UITableView 中的单元格,但是当我删除它们时,它们会在我重新加载应用程序后重新出现。我从使用核心数据存储值的同一数组中删除。我是否也必须直接从 coreData 中删除?我怎么做?

这是我的代码:

///Function to remove TableView Cells

public func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete
{
    SetTIME.remove(at: indexPath.row)
    if SaveData.count == 4 {
        SaveData.remove(at: myIndex*4)
        SaveData.remove(at: (myIndex*4)+1)
        SaveData.remove(at: (myIndex*4)+2)
        SaveData.remove(at: (myIndex*4)+3)}
        tableView.reloadData()
    }

}



 ///CoreData

override func viewDidLoad() {
    super.viewDidLoad()

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext
    let newTrip = NSEntityDescription.insertNewObject(forEntityName: "Sets", into: context)
    if DataGrab.count == 4{ // need to change after storing data in VC2 before sending
    newTrip.setValue(DataGrab[0], forKey: "set1")
    newTrip.setValue(DataGrab[1], forKey: "set4")
    newTrip.setValue(DataGrab[2], forKey: "set3")
    newTrip.setValue(DataGrab[3], forKey: "set2")}


    do {
        try context.save()
        print("Saved")
    }
    catch{
        //ProcessError
    }


    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Sets")
    request.returnsObjectsAsFaults = false

    do {
        let results = try context.fetch(request)
        if results.count > 0 {
            for result in results {
                if let set1 = (result as AnyObject).value(forKey: "set1") as? String
                {
                    if SaveData.contains(set1){

                    } else {
                    SaveData.append(set1)
                        SetTIME.append(set1)

                if let set2 = (result as AnyObject).value(forKey: "set2") as? String
                {
                    SaveData.append(set2)
                }
                if let set3 = (result as AnyObject).value(forKey: "set3") as? String
                {
                    SaveData.append(set3)
                }
                if let set4 = (result as AnyObject).value(forKey: "set4") as? String
                {
                    SaveData.append(set4)
                        }
                    }
                }
            }
        }
    }
    catch{
        //ProcessErrors
    }

最佳答案

您可以将 NSFetchedResultsController 与 UITableview 一起使用。这将负责核心数据中对象的删除/添加/编辑。

以下是创建 NSFetchedResultsController 的链接

https://cocoacasts.com/populate-a-table-view-with-nsfetchedresultscontroller-and-swift-3/

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html

关于swift - UITableView内容删除后没有被删除? [Swift 3.0 - Xcode 8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44937644/

相关文章:

ios - 将collectionView添加到标题

iphone - 在 iOS 中添加多个 subview 的动画

ios - 如何修复命令 PhaseScriptExecution 失败并在 macOS 中运行 Flutter 时出现非零退出代码?

iphone - UITableView 实现 "how to"(就像在 iphone 的 twitter 应用程序中一样)

ios - Swift:tableView.reloadData() 方式太慢

ios - tableView 单元格中标签的框架大小不会改变

iOS : How to get song id using echonest Api

xcode - 运行应用程序时我的按钮不可见

iOS崩溃: MTLRenderPassDescriptor null after rotation

ios - 文件丢失错误 iOS Xcode