2015-11-10 44 views
1

我试图将用户总数存储在列中,并查看用户是否已经存在,如果存在,它不会创建新的对象ID,但如果不存在那么它会创建一个新的对象ID。在附件中,即使用户已经存在,它也会创建多个对象标识符,因此不会更新分数,而是创建新分数,并且永远不会留下if语句的第一部分,因为只有该行的对象标识位于那里并没有用户对象ID。将用户指针列保存到数组解析swift

这是我的代码:

func saveScoresOnParse() { 

    var objectUserIdArray = [String]() 

    let objectUserIdQuery : PFQuery = PFQuery(className: "Scores") 



    objectUserIdQuery.findObjectsInBackgroundWithBlock { 

     (objects : [PFObject]? , error : NSError?) -> Void in 



     var objectID = objects! as [PFObject] 



     for i in 0..<objectID.count { 

      objectUserIdArray.append(objectID[i].objectId!) 

     } 



     for _ in objectID { 

      print(objectUserIdArray) 

     } 

     for (var i = 0 ; i < objectUserIdArray.count ; i++) { 

      if self.userID != objectUserIdArray[i] { 

       print("New Scores") 



       print("R: \(self.rightAnswers)") 

       print("W: \(self.wrongAnswers)") 

       print("S: \(self.skippedQuestions)") 

       self.scores["User"] = PFUser.currentUser() 

       self.scores["Right"] = self.rightAnswers 

       self.scores["Wrong"] = self.wrongAnswers 

       self.scores["Skipped"] = self.skippedQuestions 

       self.scores.saveInBackground() 



      } else if self.userID == objectUserIdArray[i] { 

       print("Updates Scores") 



       self.scores.incrementKey("Right", byAmount: 1) 

       self.scores.incrementKey("Wrong", byAmount: 1) 

       self.scores.incrementKey("Skipped", byAmount: 1) 

       print("R: \(self.rightAnswers)") 

       print("W: \(self.wrongAnswers)") 

       print("S: \(self.skippedQuestions)") 

       self.scores.saveInBackgroundWithBlock { 

       (success: Bool, error: NSError?) -> Void in 

       if (success) { 

       // The score key has been incremented 

       } else { 

       // There was a problem, check error.description 

       } 

       } 



      } else { 

       print("Error") 

      } 

     } 
    } 

这是发生了什么:

Wrong stuff happening

回答

1

这是因为你的循环的声明说,它应该运行而iobjectUserIdArray.count更大,并且您从i开始为0.在开始时,i不可能超过objectUserIdArray.count。 (最多可以等于它,即如果objectUserIdArray.count本身为0,但在这种情况下不需要循环)。取而代之的是,循环运行时,i小于objectUserIdArray.count

for (var i = 0 ; i < objectUserIdArray.count ; i++) { 

在关于第二个问题,因为我不能告诉类型参与检查不同的变量我是否self.userID == objectUserIdArray[i]不能肯定,这是错误的表达方式,但我认为一个似乎是更好的方式是:

if objectUserIDArray.contains(self.userID){ 
    //some code here 
} 
else{ 
    //more code here 
} 

该片段应注意的是,您现在有比较循环.contains()检查数组,看它是否包含你正在寻找和我的项目。认为这是你正在寻找的功能。目前的设置不会做这样的事情。 (这是因为你循环了所有的可能性,但是每次你做某种操作时,无论是创建还是编辑用户,所以如果你想知道数组是否包含你正在寻找的东西,在最后,你会运行很多代码,然后才意味着在阵列中不包含该项目的情况下运行,直到最后,代码才会知道该项目。)

+0

谢谢你的问题!但主要问题仍然存在,如何可以存储User列而不是Object ID列,并查看当前用户对象ID是否已经存在?因为现在仍然'self.userID'永远不会等于它会继续创造新的分数并且永远不会更新分数。 –

+0

这篇文章是否回答了您的问题,请标记为正确。 – Acoop

+0

哈哈我有,但这不是主要问题。存储在'objectUserIDArray'中的东西不是我在swift中用户列中的对象id。它在Object Id列中的对象ID。这是我遇到的主要问题。因为现在循环的第一部分总是执行。 –