2015-11-10 43 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。這是我遇到的主要問題。因爲現在循環的第一部分總是執行。 –