UITableView 行被删除后不会被删除
Posted
技术标签:
【中文标题】UITableView 行被删除后不会被删除【英文标题】:UITableView row won't removed after being deleted 【发布时间】:2016-08-08 13:18:17 【问题描述】:我遇到的问题是,在我删除我的tableview
行后,该行不会被删除,这是代码,我已经按照在线教程,它成功地从数据模型中删除,但它成功了除非我回到前一个屏幕并回到这个视图,否则不要关闭已删除的行,这是为什么呢? :
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
return true
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if (editingStyle == UITableViewCellEditingStyle.Delete)
let product = frc.objectAtIndexPath(indexPath) as! Product
let productName = product.name
let message = (MCLocalization.sharedInstance.stringForKey("cart_remove_one_item_message", replacements: ["%s" : productName!]))
let alert = UIAlertController(title: (MCLocalization.sharedInstance.stringForKey("cart_remove_title")), message: message, preferredStyle: UIAlertControllerStyle.Alert)
let OKAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:
(_)in
let managedObject : NSManagedObject = self.frc.objectAtIndexPath(indexPath) as! NSManagedObject
self.moc.deleteObject(managedObject)
self.tableView.reloadData()
do
try self.moc.save()
catch
print("Failed to save.")
return
)
alert.addAction(OKAction)
alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
self.presentViewController(alert, animated: false, completion: nil)
【问题讨论】:
【参考方案1】:您在保存删除之前重新加载表,因此您将获得一个仍然包含相同数据的重新加载表。保存后输入self.tableView.reloadData()
。
【讨论】:
【参考方案2】:您还需要从数组中删除对象,然后在成功 moc.save()
后重新加载您的 tableView
。
let managedObject : NSManagedObject = self.frc.objectAtIndexPath(indexPath) as! NSManagedObject
self.moc.deleteObject(managedObject)
do
try self.moc.save()
catch
print("Failed to save.")
return
编辑:
您需要在问题中添加您正在使用NSFetchedResultsController
,现在我认为您已经使用self.frc.delegate = self
设置了委托,然后添加此委托方法也删除了reloadData
,现在不需要了。
func controllerWillChangeContent(controller: NSFetchedResultsController)
tableView.beginUpdates()
func controllerDidChangeContent(controller: NSFetchedResultsController)
tableView.endUpdates()
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)
switch type
case .Insert:
tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Automatic)
case .Delete:
tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Automatic)
default: break
关于 NSFetchedResultsController 检查教程的更多详细信息,它将帮助您。
Using NSFetchedResultsController to Display Data with Swift Core Data and Swift: NSFetchedResultsController【讨论】:
它有一个错误“'NSFetchResultsController'类型的值没有成员'删除对象'。”以上是关于UITableView 行被删除后不会被删除的主要内容,如果未能解决你的问题,请参考以下文章
[UITableView _endCellAnimationsWithContext:]
在后台删除的数据导致 UITableView 中的索引超出范围崩溃
如何减少/删除分组 UITableView 中的左/右手边距?
ios - UITableView 删除按钮不会对手势做出反应