在表视图中删除核心数据对象

Posted

技术标签:

【中文标题】在表视图中删除核心数据对象【英文标题】:Deleting core data objects in a table view 【发布时间】:2015-05-22 04:29:06 【问题描述】:

我是 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 对象而不是数组对象?

谢谢。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:
    Core Data 中删除项目 从您的 NSObject 数组中删除项目 从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)
       

【讨论】:

以上是关于在表视图中删除核心数据对象的主要内容,如果未能解决你的问题,请参考以下文章

核心数据未在表视图中获取

表视图中的索引超出范围:在表视图中批量删除后的canEditRowAt

在表视图或集合视图中删除与 IndexPath 关联的 CKRecord 的稳健方法是啥?

UITableView - 核心数据应用程序中的表视图崩溃,因为删除后行数无效

核心数据表视图删除崩溃

使用 Core Data 的 View Controller 中的表视图