首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多重选择的核心数据的快速删除

具有多重选择的核心数据的快速删除
EN

Stack Overflow用户
提问于 2016-05-07 07:33:39
回答 1查看 286关注 0票数 0

在核心数据应用程序中,我们可以滑动删除一行,但我希望通过选择多行来删除它们。

代码语言:javascript
复制
self.tableView.allowsMultipleSelectionDuringEditing = true

我已经做了上面的工作,我也实施了通常的删除方法。我也尝试过这样的方法。

代码语言:javascript
复制
     func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    return UITableViewCellEditingStyle.Delete
}

     func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

    let entry: DiaryEntry = self.fetchedResultsController.objectAtIndexPath(indexPath) as! DiaryEntry
    let coreDataStack: CoreDataStack = CoreDataStack.defaultStack
    coreDataStack.managedObjectContext.deleteObject(entry)
    coreDataStack.saveContext()
}
  func controllerWillChangeContent(controller: NSFetchedResultsController) {
    self.tableView.beginUpdates()
}

    var multipleSelection = false

    func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
    switch type {

    case .Insert :
        if indexPath != newIndexPath {
            tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Automatic)
        }

    case .Delete :
        if (multipleSelection == true) {
            let selectedRows = self.tableView.indexPathsForSelectedRows
            for selectionIndex in selectedRows! {
                let indicesOfItemsToDelete = NSMutableIndexSet()

                indicesOfItemsToDelete.addIndex(selectionIndex.row)

                let entry: DiaryEntry = self.fetchedResultsController.objectAtIndexPath(selectionIndex) as! DiaryEntry
                let coreDataStack: CoreDataStack = CoreDataStack.defaultStack
                coreDataStack.managedObjectContext.deleteObject(entry)
                coreDataStack.saveContext()
            }
            self.tableView.deleteRowsAtIndexPaths(selectedRows!, withRowAnimation: .Automatic)
        } else {
            self.tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Automatic)
        }

    case .Update :
        self.tableView.reloadRowsAtIndexPaths([indexPath!], withRowAnimation: .Automatic)

    case .Move :
        self.tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Automatic)
        if indexPath != newIndexPath {
            tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Automatic)
        }

    }
}

   func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
    switch type {

    case .Insert :
        self.tableView.insertSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Automatic)

    case .Delete :
        self.tableView.deleteSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Automatic)

    case .Update :

        //let range: NSRange = NSMakeRange(0, (self.fetchedResultsController.sections?.count)!)
        self.tableView.reloadSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Automatic)

    default:
        break
    }

}

当我按下编辑方法时,我将tableView的编辑设置为true,在选择之后,当我按delete按钮时,下面是代码。

代码语言:javascript
复制
 let selectedRows = self.tableView.indexPathsForSelectedRows
 multipleSelection = true
 for selectionIndex in selectedRows! {
                tableView(tableView, commitEditingStyle: .Delete, forRowAtIndexPath: selectionIndex)
            }
 self.tableView.deleteRowsAtIndexPaths(selectedRows!, withRowAnimation: .Automatic)
    self.tableView.reloadRowsAtIndexPaths(selectedRows!, withRowAnimation: .Automatic)

但是,我得到了一个错误: CoreData: error:严重的应用程序错误。在核心数据更改处理过程中捕获了异常。这通常是……的观察者中的一个错误。

谁能告诉我解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-07 07:45:06

不要通过要求表视图删除(提交编辑类型)来删除。获取托管对象的列表,以便自己删除并从上下文中删除它们,然后告诉表视图它们不见了(您已经这样做了)。另外,在告诉表行已消失后,不要重新加载它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37085833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档