我正在从UITableView中删除一行,该行从CoreData接收其信息。目前,我已经弄清楚它可以删除CoreData信息的位置,但它没有消除UITableView中的行。我使用的大多数方法都会导致崩溃。这是原始代码(credit:blog.revivalx.com)
var peopleArray: NSMutableArray = [People]() //People is CoreData entity
@IBOutlet weak var contactTable: UITableView!
let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context: NSManagedObjectContext = appDel.managedObjectContext!
context.deleteObject(peopleArray[indexPath.row] as! NSManagedObject)
peopleArray.removeAtIndex(indexPath.row)
context.save(nil)
我试过插入:
contactTable.deleteRowsAtIndexPaths([indexPath.row
], withRowAnimation: UITableViewRowAnimation.Automatic)
进入此代码并遇到错误。对于我如何同时执行两次删除,许多消息来源都没有找到答案。
如何在Swift中同时删除UITableView中的行及其在CoreData中的相应条目?
由于
编辑:
这是完整的功能:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == UITableViewCellEditingStyle.Delete {
let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context: NSManagedObjectContext = appDel.managedObjectContext!
context.deleteObject(peopleArray[indexPath.row] as NSManagedObject)
peopleArray.removeAtIndex(indexPath.row)
contactTable.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
context.save(nil)
contactTable.reloadData()
}
}
答案 0 :(得分:0)
这一行
contactTable.deleteRowsAtIndexPaths([indexPath.row], withRowAnimation: UITableViewRowAnimation.Automatic)
应该更改为此方法,因为它应该an array of indexPath
而不是array indexPath.row
contactTable.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
答案 1 :(得分:0)
你做得太多了。这应该(粗略地)根据MVC(模型视图控制器)设计模式工作:
用户点击删除,告诉Core Data删除对象和视图以重新加载数据。
因此,您应该从委托功能中删除deleteRowsAtIndexPaths
。将表格视图发送到reloadData
会导致UITableView
调用您的数据源委托函数,例如tableView(_ tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
。在该功能中,您可以向Core Data索取正确的数据并将其移交给视图。
或者更好的是,使用Swift和Core Data选项创建一个新的Master-Detail应用程序,您可以免费获得所有正确的源代码。这段代码的处理方式与我上面提到的不同:它将表视图告诉deleteRowsAtIndexPaths
,但它也没有。{/ p>