我是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对象而不是数组对象?
谢谢。
答案 0 :(得分:2)
您的问题是您是从数组中删除NSManagedObject,而不是从托管对象上下文中删除。要从Core Data中删除它,您应该从托管对象上下文中删除它,如下所示:
managedObjectContext?.deleteObject(toDoItem)
managedObjectContext?.save(nil)
但是,如果您使用Core Data填充UITableView,我建议使用NSFetchedResultsController。可以找到完整的实施here。
答案 1 :(得分:0)
Core Data
NSObject
数组Row
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)
}