在解析Swift中删除tableview单元格

时间:2015-09-12 17:45:36

标签: swift parse-platform

我正在使用Parse,我有一个带有笔记的tableview。我正在尝试添加删除功能,并使用此代码滑动并显示删除但是当我按删除时,应用程序关闭。任何人都知道如何解决这个问题?

import UIKit

class MasterTableViewController: UITableViewController, PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate {
    var noteObjects: NSMutableArray! = NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        if (PFUser.currentUser() == nil) {
        }else {
            self.fetchAllObjectsFromLocalDatastore()
            self.fetchAllObjects()
        }
    }

    func fetchAllObjectsFromLocalDatastore() {
        var query: PFQuery = PFQuery(className: "Note")

        query.fromLocalDatastore()
        query.whereKey("username", equalTo: PFUser.currentUser()!.username!)
        query.orderByDescending("createdAt")
        query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

            if (error == nil) {
                var temp: NSArray = objects!;  NSArray.self
                self.noteObjects = temp.mutableCopy() as! NSMutableArray
                self.tableView.reloadData()
            }else {
            }
        }
    }

    func fetchAllObjects() {
        PFObject.unpinAllObjectsInBackgroundWithBlock(nil)

        var query: PFQuery = PFQuery(className: "Note")
        query.whereKey("username", equalTo: PFUser.currentUser()!.username!)
        query.orderByDescending("createdAt")
        query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

            if (error == nil) {
                PFObject.pinAllInBackground(objects, block: { (success, error) in
                    if error == nil {
                        self.fetchAllObjectsFromLocalDatastore()
                    }
                })
            }else {
                println(error!.userInfo)
            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Potentially incomplete method implementation.
        // Return the number of sections.
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete method implementation.
        // Return the number of rows in the section.
        return self.noteObjects.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MasterTableViewCell

        var object: PFObject = self.noteObjects.objectAtIndex(indexPath.row) as! PFObject

        cell.masterTitleLabel?.text = object["title"] as? String
        cell.masterTextLabel?.text = object["text"] as? String

        return cell
    }

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

        if editingStyle == UITableViewCellEditingStyle.Delete {
            if indexPath.row + 1 > self.noteObjects.count {
                return
            }
            if indexPath.row + 1 > self.noteObjects.count {
                return
            }

            // 1. Find the objects while they are still in the array
            var selectedPFlocation: AnyObject = self.noteObjects.objectAtIndex(indexPath.row)
            var selectedPTLocation: AnyObject = self.noteObjects.objectAtIndex(indexPath.row)

            // 2. Update the model by removing them from the array
            self.noteObjects.removeObjectAtIndex(indexPath.row)
            self.noteObjects.removeObjectAtIndex(indexPath.row)

            // 3. Delete the rows from the table view
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

            // 4. Delete the actual data in your discretion
            selectedPFlocation.deleteInBackgroundWithBlock(nil)
            selectedPTLocation.deleteInBackgroundWithBlock(nil)

            // do not reload the table view
            // self.tableView.reloadData()
        }    
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        self.performSegueWithIdentifier("editNote", sender: self)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var upcoming: AddNoteTableViewController = segue.destinationViewController as! AddNoteTableViewController

        if (segue.identifier == "editNote") {
            let indexPath = self.tableView.indexPathForSelectedRow()!

            var object: PFObject = self.noteObjects.objectAtIndex(indexPath.row) as! PFObject

            upcoming.object = object

            self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这是我的工作代码示例,它可以自动删除,解析和更新表数据。

//delete records function
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
  if editingStyle == UITableViewCellEditingStyle.Delete {
    var cartClass = PFObject(className: CART_CLASS_NAME)
    cartClass = cartArray[indexPath.row] as! PFObject
    cartClass.deleteInBackgroundWithBlock {(success, error) -> Void in
      if error == nil {
        self.cartArray.removeObjectAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
        print("successfully deleted!")
      } else {
        print("something wrong, please try again")
      }
    }
  }
}