【问题标题】:Deleting core data objects in a table view在表视图中删除核心数据对象
【发布时间】:2023-03-06 04:11:01
【问题描述】:

我是 Swift 新手,我正在学习有关制作手势驱动应用程序的教程。

与教程一样,表格视图由数组对象填充。

当用户向左拖动单元格时,有一个功能可以从表格视图中删除一个项目。

func toDoItemDeleted(toDoItem: ToDoItem) {
  let index = (toDoItems as NSArray).indexOfObject(toDoItem)
  if index == NSNotFound { return }

  // could removeAtIndex in the loop but keep it here for when indexOfObject works
  toDoItems.removeAtIndex(index)

  // use the UITableView to animate the removal of this row
  tableView.beginUpdates()
  let indexPathForRow = NSIndexPath(forRow: index, inSection: 0)
  tableView.deleteRowsAtIndexPaths([indexPathForRow], withRowAnimation: .Fade)
  tableView.endUpdates()    
}

在教程中数组命名为toDoItems,还有一个NSObject类命名为ToDoItem

在我的实施中,我使用 Core Data 而不是数组来填充表格视图。我创建了一个名为 Tasks 的 NSObject,而不是教程中的 NSObject。

我应该如何更改函数以删除 Core Data 对象而不是数组对象?

谢谢。

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    您的问题是您要从数组中删除 NSManagedObject,而不是从托管对象上下文中删除。要将其从 Core Data 中删除,您应该将其从托管对象上下文中删除,如下所示:

    managedObjectContext?.deleteObject(toDoItem)
    managedObjectContext?.save(nil)
    

    但是,如果您使用 Core Data 来填充 UITableView,我建议您使用 NSFetchedResultsController。完整的实现可以在here找到。

    【讨论】:

      【解决方案2】:
      1. Core Data 中删除项目
      2. 从您的 NSObject 数组中删除项目
      3. UITableView 中删除Row

      commitEditingStyle方法中写下代码

      if editingStyle == .Delete {
      
             // Step : 1
              let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
      
              let manageContext = appDelegate.managedObjectContext!
              // I have Store Item in Data which is type of NSManagedObject
              // This will remove item from coredata
              manageContext.deleteObject(Data[indexPath.row])
      
              var err:NSError?
      
              if !manageContext.save(&err)
              {
                 println("Data couldn't delete")
              }
              // Step : 2 Delete the row from the data source
      
              self.Data.removeAtIndex(indexPath.row)
      
              // Step 3:
              tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
          }   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-17
        • 2012-06-17
        • 2016-11-07
        • 2017-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多