旧代码
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) }
新规范
func savescoresOnParse() { objectUserIDquery.whereKey("User",equalTo: PFObject(withoutDataWithClassname: "_User",objectID: userID)) objectUserIDquery.findobjectsInBackgrounDWithBlock { (objects : [PFObject]?,error : NSError?) -> VoID in if error == nil { //var objectID = objects! as [PFObject] /*for i in 0..<objectID.count { self.objectUserIDArray.append( objectID[i].objectID! ) }*/ for _ in objects! { print(objects) } // The score key has been incremented for (var i = 0 ; i < self.objectUserIDArray.count ; i++) { if self.userID != objects![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 == objects![i] { print("Updated 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") } } } else { print(error) } }
但它只存储objectID列而不是指针< _User>柱.我知道这一点,因为当我打印内部的东西时,它会打印出objectIDs.
这就是发生的事情,而不仅仅是更新当前用户的分数,它只会创建新的分数.我希望if语句检查用户是否已经存在于该列中,如果它确实更新了分数,如果没有,则创建新的分数. (新代码的if语句不起作用,我必须把它拿出来保存…)
解决方法 您更新的问题可以更清楚地了解您实际想要做的事情;在Parse score对象中保存或更新用户的分数.要做到这一点,没有理由检索任何对象ID或循环任何结果.在使用Parse时,通常不会明确地使用Object IDs;你可以简单地传递对象本身,Parse会为你编制引用.
我不确定你是怎么想改变分数的;在上面的代码中,您在一个案例中增加但在另一个案例中明确地设置分数,但下面的代码显示了一般方法.
如果您经常或反复更新分数记录,那么您可以通过在第一次找到它之后在属性中保留对scores对象的引用来简化代码,并简单地更新&随后保存.
func savescoresOnParse() { if let currentUser=PFUser.currentUser() { let scorequery= PFquery(classname: "scores") scorequery.whereKey("User",equalTo:currentUser) scorequery.getFirstObjectInBackgrounDWithBlock { (object : PFObject?,error : NSError?) -> VoID in if error == nil { var scoreObject=object ?? PFObject.objectWithClassname("scores") if (scoreObject["User"]==nil) { scoreObject["User"]=currentUser } scoreObject["Right"]=self.rightAnswers scoreObject.saveInBackground() } else { print(error) } } } else { print("No current user!") }}总结
以上是内存溢出为你收集整理的ios – 通过Swift应用程序中的自定义Parse列进行迭代全部内容,希望文章能够帮你解决ios – 通过Swift应用程序中的自定义Parse列进行迭代所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)