我正在尝试将总用户存储在列中并查看用户是否已存在,如果存在,则不会创建新的对象ID,但如果没有,则会生成新的对象ID 。在附件中你会看到它创建了多个对象id,即使用户已经存在,所以不是更新得分,它会创建新的,而且永远不会离开if语句的第一部分,因为只有行的对象ID在那里而不是用户对象ID。
这是我的代码:
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")
}
}
}
这就是:
答案 0 :(得分:1)
这是因为你的循环声明表明它应该在from django.db import models, migrations
def date_to_datetime(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Product = apps.get_model("yourappname", "Product")
for product in Product.objects.all():
# convert a date to a date time on the product instance
product.save()
class Migration(migrations.Migration):
dependencies = [
('yourappname', 'migration_name'),
]
operations = [
migrations.RunPython(date_to_datetime),
]
大于i
时运行,并且你从objectUserIdArray.count
开始。{{1一开始就超过i
。 (最多它可以等于它,即如果i
本身为0,但在这种情况下不需要循环。)而是在objectUserIdArray.count
小于{时使循环运行{1}}。
objectUserIdArray.count
关于第二个问题,因为我无法分辨检查中涉及的不同变量的类型i
我是否不能确定它是错误的表达,但我认为那个似乎会更好:
objectUserIdArray.count
此片段应该从您当前进行比较的循环中取出。for (var i = 0 ; i < objectUserIdArray.count ; i++) {
检查数组以查看它是否包含您要查找的项目,我认为这是您的功能寻找。目前的设置不会做这样的事情。 (这是因为你循环遍历所有可能性,但每次你做某种动作时,要么创建或编辑用户。所以如果你想知道数组是否包含你正在寻找的东西,它确实如此,但只是在最后,那么你之前运行了很多代码,你只想在阵列没有包含该项目的情况下运行,代码在最后一直都不会知道。)