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

时间:2015-05-22 04:29:06

标签: ios swift core-data

我是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,还有一个名为ToDoItem的NSObject类。

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

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

谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

  1. Core Data
  2. 删除项目
  3. NSObject数组
  4. 中删除项目
  5. Row
  6. 中删除UITableView

    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)
        }