我在Swift中构建了一种热门或非风格的应用程序,用户可以分别对图像进行投票:HOT,NOT和MAYBE。
每次用户访问图像时,他们都会投票,然后对于每个相应的投票,IBAction会触发一个查询,显示来自Parse的总投票结果和总热门数,如下面的代码所示。
我打算有1000张图片。
我可以预加载与每个相应图像对应的所有objectID,然后当用户对图像进行投票时,数据已经从解析中预加载/查询了吗?我该怎么办?
现在,我正在为每个ObjectID编写一个查询,该查询将从1000个不同的图像中获取1000个查询...显然不可扩展。
swipePosition变量只是一个计数器,用于计算用户所在的图像。存储的图像位于数组中,现在存储在Xcode上。也许如果它们存储在Parse中,它们也可以预加载?
(我只显示" hotButtonQuery"函数,但还有一个Not and Maybe buttonQuery函数......)
有没有办法简单地使用这个代码,以便它可以扩展?因为到目前为止我无法扩展超过25张图片...
非常感谢!
func hotButtonQuery() {
if swipePosition == 0 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("RlvK3GhfqE") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
} else if swipePosition == 1 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("30WlVtgurP") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
//println(userData.objectForKey("totalVotes"))
//println("total HOTs:")
//println(userData.objectForKey("hot"))
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
} else if swipePosition == 3 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("5D6ARjk3xS") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
//println(userData.objectForKey("totalVotes"))
//println("total HOTs:")
//println(userData.objectForKey("hot"))
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
}
答案 0 :(得分:0)
恭敬地,我建议重新考虑你的整个方法。不要在您的代码中存储objectIds。不要一遍又一遍地重复相同的代码块。保持简单:
如果您想减少查询次数,请分批抓取10个左右。没有意义加载所有内容,因为用户不太可能点击所有1000。
唯一需要弄清楚的是如何跟踪用户已投票的图像。您可以在客户端或在Parse中执行此操作。有一些不错的方法。