同时从tableview行和核心数据中删除项目
我试图从TableView和名为“Books”的实体中删除项目。然而,我不知道我是否在遥远的轨道上。当我尝试此代码:同时从tableview行和核心数据中删除项目
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
var appdel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var context:NSManagedObjectContext = appdel.managedObjectContext!
var request = NSFetchRequest(entityName: "Books")
if editingStyle == UITableViewCellEditingStyle.Delete {
addBook.myBooks.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
context.deleteObject(addBook.myBooks[indexPath.row] as! NSManagedObject)
}
}
我得到的最后一行写着警告“从‘字符串’到不相关类型的‘NSManagedObject’总是失败演员。”有谁知道我如何解决这个问题?我读过你可以使用fetchedResultsController轻松处理表格中的核心数据,但我是编程新手,发现通常在设置核心数据时这种方法有点混乱。是否需要管理我的TableView中的数据的fetchedResultsController?
后从你的错误,它听起来就像是addBook.myBooks
字符串数组。
目前的问题是deleteObject
不适用于字符串,它适用于托管对象 - 即NSManagedObject
的实例或NSManagedObject
的子类。你不能像这样从核心数据中删除一个字符串,你必须删除与该字符串对应的被管理对象。该错误明确告诉您as! NSManagedObject
对字符串不起作用,因为字符串与管理对象完全不同。
[这也是你在indexPath.row
通过removeAtIndex
去除串,再后来尝试使用在indexPath.row
你只是删除了字符串中的问题,但在这里,这不是真正的问题。]
什么您需要做的是找到与您要删除的表视图行对应的托管对象,然后将其传递给deleteObject
。如果没有您的视图控制器是如何工作的,这是不可能说究竟你会怎么做,但也有很清楚两件事情更全面:
那些第一三线在你的方法没有做任何事情有用。切断他们 - 即使你让他们工作,他们在这里也会是错误的做法。您不希望必须获取您在此处删除的管理对象。当你达到这个方法时,你应该已经知道了足够的把它删除。
这不是必要使用
NSFetchedResultsController
将核心数据与表视图。但是如果你对编程不熟悉,那么如果你使用它,可能会发现更容易。
尝试保存您的上下文DeleteObject的
context.deleteObject(addBook.myBooks![indexPath.row])
addBook.myBooks.removeAtIndex(indexPath.row)
do {
try context.save()
}
catch {
print("Error")
}
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}