2015-08-13 18 views
1

在我的应用程序中我试图在每次创建事件时给用户点数。我正在设置一个PFQuery来检索当前分数,然后将所需的分数保存回班级。我的问题是,一旦它创建完毕,我就无法更新分数,所以我需要一种方法来使用附加分数“更新”当前分数数据。
这是我的代码:将数据添加到Parse类中的当前数据

// Give the User Points 

    let saveScore = PFUser.currentUser() 

    var query = PFQuery(className:"User") 
    query.whereKey("score", equalTo: saveScore!) 
    query.findObjectsInBackgroundWithBlock ({ 
     objects, error in 

     if error == nil { 
      // The find succeeded. 
      println("Successfully retrieved \(objects!.count) scores.") 
      // Do something with the found objects 
      if let objects = objects as? [PFObject] { 
       for object in objects { 

        let Score = object["score"] as! String 

        println(object.objectId) 

        let Points = ("100" + Score) 


        saveScore!.setObject(Points, forKey: "score") 

        saveScore!.saveInBackgroundWithBlock { (success: Bool,error: NSError?) -> Void in 
         println("Score added to User."); 

        } 
       } 
      } 
     } else { 
      // Log details of the failure 
      println("Error: \(error!) \(error!.userInfo!)") 
     } 
    }) 

谁能帮助? 谢谢

回答

1

由于您已拥有当前用户,因此没有理由对其进行查询。但是,如果需要,您应该取它,以确保您使用的是最新数据。获取一次设置你的分数变量中添加100字符串,然后保存更新的得分变量,就像这样:

if let currentUser = PFUser.currentUser() { 

     currentUser.fetchIfNeededInBackgroundWithBlock({ (foundUser: PFObject?, error: NSError?) -> Void in 

      // Get and update score 

      if foundUser != nil { 

       let score = foundUser!["score"] as! String 

       let points = "100" + score 

       foundUser!["score"] = points 

       foundUser?.saveInBackgroundWithBlock({ (succeeded: Bool, error: NSError?) -> Void in 

        if succeeded { 

         println("score added to user") 
        } 
       }) 

      } 

     }) 

    } 
+0

好的甜蜜的作品谢谢!但是现在我又遇到了另一个问题,因为它是一个字符串,因此将字数显示为100 + 100 = 100100。我如何将它们加在一起以使100 + 100 = 200?我假设我需要将其转换为整数? –

+0

请将答案标记为正确,以便其他人知道它的工作原理。所以每个问题都应该针对一个问题。虽然听起来你应该将数据存储为整数而不是字符串 –

+1

好的,我会试试看。谢谢您的帮助!!! –

0

您需要查询保存的对象,然后就保存像正常。它会像这样更新:

var query = PFQuery(className:"GameScore") 
query.getObjectInBackgroundWithId("xWMyZEGZ") { 
(gameScore: PFObject?, error: NSError?) -> Void in 
if error != nil { 
println(error) 
} else if let gameScore = gameScore { 
gameScore["cheatMode"] = true 
gameScore["score"] = 1338 
gameScore.saveInBackground() 
} 
}