在表视图中删除核心数据对象
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 的稳健方法是啥?