在swift UITableView中同时选择并删除/删除多行

时间:2015-06-05 19:31:45

标签: ios uitableview swift xcode6

我有一个带有两个表视图的应用程序,每个表视图根据一个属性(频繁)显示来自一个实体的数据,数据类型为Bool。因此,如果'频繁'为真,那么该项目将显示在view1中,如果'频繁'为假,则该项目将显示在view2中。

当用户检查行时,数据和行号将保存在临时数组中(已选中),(允许用户选择取消选中/取消选择行)。

然后,当单击“完成”时,将切换所选行中内容的属性(频繁)(选中);填充这些视图的函数将负责实际移动数据。

目前,检查/取消检查,移动数据工作正常。但是当前视图不会通过删除移动的行来更新表视图。我必须转到另一个视图并回来查看表格以重新加载数据并反映当前的数据内容。

我试图包含tableView.reloadData();在'完成'按钮的@IBAction末尾的self.tableView.reloadData(),但我仍然无法解决这个问题。

我试图在'didSelectRowAtIndexPath'中保存所选行的indexPath,并在@IBAction中使用该数组将其逐个传递给'tableView.deleteRowsAtIndexPaths'或作为数组但我得到错误

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        var mySelectedCell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
        if mySelectedCell.accessoryType == .Checkmark {
            mySelectedCell.accessoryType = .None
            selectedRow[indexPath.row] = false
            //remove content of 'indexPath.row' from 'checked'
            itemIndex = indexOfItemInChecked(myItemFav[indexPath.row] as! Item)
            itemIndexPath = indexOfIndexPath(indexPath)
            selectedRowIndexPath.removeAtIndex(itemIndexPath)
            checked.removeAtIndex(itemIndex)
        } else {
            mySelectedCell.accessoryType = .Checkmark
            checked.append(myItemFav[indexPath.row] as! Item)
            selectedRow[indexPath.row] = true
//Array to hold indexPath of selected rows              selectedRowIndexPath.append(tblFavorites.indexPathForCell(mySelectedCell)!)
        }
    }

“完成”按钮的功能是

    @IBAction func btnDone(sender: AnyObject) {
        let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let context: NSManagedObjectContext = appDel.managedObjectContext!
        let itemEntity = NSEntityDescription.entityForName("Item", inManagedObjectContext: context)
        if !selectedRow.isEmpty {
            for key in selectedRow.keys {
                if selectedRow[key] == true {
                    checkedIndex.append(key)
                }
            }
        }
        checkedIndex.sort(>)
        //println(checkedIndex)
        for key in checkedIndex {
            myItemFav[key].setValue(true as Bool, forKey: "purchased")
        }
//this for loop code, when included gives me the error below
            for path in selectedRowIndexPath {
            tblFavorites.deleteRowsAtIndexPaths([path], withRowAnimation: .Fade)
        }
        context.save(nil)
    }

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(7)必须等于行数在更新(7)之前包含在该部分中,加上或减去从该部分插入或删除的行数(0插入,1删除)和加或减移入或移出该部分的行数(0移入,0搬出去。'

如果我删除for循环,除了更新tableview直到我更改视图并返回它之前,它都可以正常工作。

HELP!

0 个答案:

没有答案
相关问题