2016-04-14 10 views
-1

Ich versuche, einige Abstimmungsschaltflächen für meine Film-App zu machen.Löschen einer Zeile aus einer Klasse in Parse - In Swift

Ich benutze Parse, und ich habe eine neue Klasse namens Votes_Up erstellt. In dieser Klasse sind sie 2 Spalten: User_Voting und Film_VotedFor.

Mein Code unten wird ausgeführt, wenn die Taste gedrückt wird. Es nimmt den currentUser und das Filmobjekt, gegen das die Schaltfläche gedrückt wurde, und fügt sie Parse hinzu. Meine Datenbank sieht wie folgt aus:

enter image description here

Was ich brauche

so es sie, wie zur Zeit arbeitet, wenn der Benutzer die Abstimmung Taste drückt, fügt die Informationen an die DB und addiert 1 zu die Zählung. Wenn der Benutzer sie erneut drückt, aktualisiert er die Zählung, indem er 1 wegnimmt.

Ich möchte auch die Zeile entfernen, die es zur Datenbank hinzugefügt hätte, durch den Benutzer, der dafür gestimmt hat. Wie kann ich das machen??

Mein Code:

@IBAction func upVoteButton(sender: UIButton) { 

    let hitPoint = sender.convertPoint(CGPointZero, toView: self.tableView) 
    let hitIndex = self.tableView.indexPathForRowAtPoint(hitPoint) 
    let object = objectAtIndexPath(hitIndex) 

    if PFUser.currentUser() != nil { 

     if userPressedUpButton == false { 

      userPressedUpButton = true 

      let voteUp = PFObject(className: "Votes_Up") 
      voteUp["User_Voting"] = PFUser.currentUser() 
      voteUp["Film_VotedFor"] = object! 

      object!.incrementKey("UpVoteCount") 
      object!.saveInBackground() 

      voteUp.saveInBackgroundWithBlock({ (success, error) in 

       if success == true { 

        // Object(s) was/were successfully saved 

       } else if error != nil { 

        // Display an alert to the user 

       } else { 

        // Display an alert to the user - something went wrong 

       } 

      }) 

     } else { 

      userPressedUpButton = false 

      // I need to removed the row from the class here that was added, as the user has retracted their vote! 

      object!.incrementKey("UpVoteCount", byAmount: -1) 
      object!.saveInBackground() 

     } 

    } else { 

     // No user is logged in so they can't vote 
     performSegueWithIdentifier("Votes_LoginPopup", sender: self) 

    } 

    self.tableView.reloadData() 

} 

Antwort

0

Versuchen Sie folgendes:

var query = PFQuery(className:"Votes_Up") 
    query.whereKey("User_Voting", equalTo:PFUser.currentUser()) 
    query.limit = 1 
    query.findObjectsInBackgroundWithBlock { 
     (votesUp: [AnyObject]?, error: NSError?) -> Void in 
     if error == nil { 
      if let objects = votesUp as? [PFObject] { 
       var firstObject = objects[0] 
       dispatch_async(dispatch_get_main_queue(),{ 
        // do delete here 
        firstObject.deleteEventually(); 
       }) 

      } 
     } 
    } 

oder dieses:

let query = PFQuery(className: "Votes_Up") 
query.whereKey("User_Voting", equalTo: PFUser.currentUser()) 
query.findObjectsInBackgroundWithBlock { 
(objects: [AnyObject]?, error: NSError?) -> Void in 
    for object in objects { 
     object.deleteEventually() 
    } 
} 
+0

Ich habe diese Zeilen lesen, aber es nicht zu übersetzen, was i‘ Ich versuche es tatsächlich. Ich habe versucht, was sie empfehlen, aber ich kann mein Ergebnis nicht bekommen. – Nick89

+0

Ich dachte, Sie möchten die Zeile löschen? Das ist, wie Sie es tun ... indem Sie delete aufrufen ... es sei denn, Sie versuchen etwas anderes zu tun. –

+0

Ich möchte eine Zeile löschen, die von dem Benutzer erstellt wurde, der sie hinzugefügt hat. Der Link, den Sie gesendet haben, zeigt mir nicht, wie das geht, und auch nicht in Swift. – Nick89