Parse Server // Parse SDK // ParseUI // PFQueryTableViewController with sections // editActionsForRowAtIndexPath

94 Views Asked by At

Parse Server: 2.2.17 (self hosted)

Parse-SDK-iOS-OSX: 1.14.2

ParseUI-iOS Version: 1.2.0

Xcode 7.3.1, Swift

I'm new at IOS Programming (20 weeks) and build an App for fun and learning.

In one of a lot of TableViewControllers with sections, i like to call a editActionsForRowAtIndexPath. This throws an error, when swipe to left:

2016-08-12 18:14:44.967 myParseCustomLoginTest[54158:729475] * Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UITableView.m:1422 2016-08-12 18:14:44.974 myParseCustomLoginTest[54158:729475] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete row 68 from section 0 which only contains 4 rows before the update'

Info:

0) If i swipe on the first section, the error throws.

1) Yes, it's right, in my first section, i have 4 rows.

2) I can't swipe to the left on the following sections. I can only swipe on the first section.

3) The table, sections and rows itself are fine (like the source data from Parse Server).

4) The same code for the editActionsForRowAtIndexPath is working fine for the same table without sections.

Code: class MenuSectionedPFQueryTableViewController: PFQueryTableViewController -> I think it's working fine, because the table, sections and rows are fine.

extension MenuSectionedPFQueryTableViewController numberOfSectionsInTableView numberOfRowsInSection titleForHeaderInSection cellForRowAtIndexPath -> I think it's working fine to, because the table, sections and rows are fine.

Inside the extension MenuSectionedPFQueryTableViewController i have this code:

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool{
    return indexPath.section == 0 ? true : false
}

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {

    // Add to diary slider
    let shareAction = UITableViewRowAction(style: .Normal, title: "Add to diary") { (action: UITableViewRowAction, indexPath: NSIndexPath) in
        // create menuItem object
        let menuItem = self.objects![indexPath.row]

        // create menu object
        let menuObject = PFObject(className: "ffdUserDiary")

        // reference menu to pointer ffdDB2Pointer
        let ex = PFObject(className: "ffdDB")
        ex.objectId = menuItem.objectId
        print(menuItem.objectId)
        menuObject.setObject(ex, forKey: "ffdDBPointer")

        // reference current user to pointer userPointer
        menuObject["userPointer"] = PFUser.currentUser()

        // add x + y to diary
        menuObject["x"] = menuItem.objectForKey("x")
        menuObject["y"] = menuItem.objectForKey("y")

        // save menuObject
        // menuObject.saveEventually()
        menuObject.saveInBackgroundWithBlock { (success, error) in
            if let error = error {
                print("error: \(error.localizedDescription)")
            } else {
                print("success: \(success)")
            }
        }

        // tableView.reloadData()
    }
    shareAction.backgroundColor = UIColor.redColor()
    return [shareAction]
}

I think it is an error with the indexPath, but can't fix it. Any ideas?

0

There are 0 best solutions below