我想知道如何存储整个自定义列(来自自定义类的用户Pointer< _User>列)并将它们全部放在数组变量中,以便我可以查看该类中是否存在该用户.这就是我所拥有的:
旧代码
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!") } }