【问题标题】:UITableView Content doesn't get deleted after deletion? [Swift 3.0 - Xcode 8]UITableView 内容在删除后不会被删除? [斯威夫特 3.0 - Xcode 8]
【发布时间】:2017-12-09 19:06:32
【问题描述】:

我试图删除 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
    }

【问题讨论】:

    标签: swift xcode uitableview core-data delete-row


    【解决方案1】:

    您可以将 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

    【讨论】:

      【解决方案2】:
          @IBOutlet weak var btnremove: UIButton!
              @IBOutlet weak var managetable: UITableView!
              var arrayStudent:[StudentData] = []
              var streno:String!
              let appDelegate = UIApplication.shared.delegate as! AppDelegate
              var managedContext:NSManagedObjectContext!
              var entity:NSEntityDescription!
      
          func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
              {
                  let obj = arrayStudent[indexPath.row]
                  streno = obj.strEnrollment
                  print(streno) 
                 deleteFeed(eno:streno )
              }
      func deleteFeed(eno:String)
          {
              managedContext = appDelegate.persistentContainer.viewContext
              let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName:"Student")
              fetchRequest.predicate = NSPredicate(format: "eno = %@", "\(eno)")
              do
              {
                  let fetchedResults =  try managedContext!.fetch(fetchRequest) as? [NSManagedObject]
      
                  for entity in fetchedResults! {
      
                      managedContext?.delete(entity)
                      do
                      {
                          try managedContext.save()
                          _ = self.navigationController?.popViewController(animated: true)
      
                      }
                      catch let error as Error!
                      {
                          print(error.localizedDescription)
                      }
                      managetable.reloadData()
      
                  }
              }
              catch _ {
                  print("Could not delete")
      
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多