我正在尝试检索PFObject,将1添加到投票计数并重新保存到Parse。
我正在使用Swift成功检索PFObject,但是当我尝试使用incrementKey()函数递增嵌套值时遇到了麻烦。
我第一次尝试:
var query = PFQuery(className:"Quests")
query.getObjectInBackgroundWithId(questId) {
(retrievedQuest: PFObject?, error: NSError?) -> Void in
if error != nil {
println(error)
} else {
if let theQuest = retrievedQuest {
if let options = theQuest["options"]{
println(options[row])
options[row].incrementKey("votes", byAmount: 1)
}
}
}
}
我收到以下错误:
-[__NSDictionaryM incrementKey:byAmount:]: unrecognized selector sent to instance 0x7f8acaf97dd0
我接下来尝试过:
var options = theQuest["options"] as! [PFObject]
并得到:致命错误:NSArray元素无法匹配Swift数组元素类型
接下来,我尝试分解我的PFObject中的元素,试图增加“投票”和“投票”。手动
var query = PFQuery(className:"Quests")
query.getObjectInBackgroundWithId(questId) {
(retrievedQuest: PFObject?, error: NSError?) -> Void in
if error != nil {
println(error)
} else {
if let theQuest = retrievedQuest {
var options = theQuest["options"] as! NSArray
var theOption = options[row] as! NSDictionary
var theVotes = theOption["votes"] as! Int
theVotes++
retrievedQuest?.saveInBackground()
可能非常明显的是,以这种方式递增投票并不会影响retrieveQuest,保存retrieveQuest并不能反映任何投票更新。
关于如何获得理想结果的任何想法?
答案 0 :(得分:0)
Swift不知道options
的类型。正如Paulw11所说,你需要投射到正确的类型。如果options是PFObject
的数组(如代码所示),则更改
if let options = theQuest["options"]{
println(options[row])
options[row].incrementKey("votes", byAmount: 1)
}
到
if let options = theQuest["options"] as? [PFObject] {
println(options[row])
options[row].incrementKey("votes", byAmount: 1)
}
可以解决您的问题。
答案 1 :(得分:0)
仅供参考 - 我通过消除options数组来解决这个问题,而是让每个选项成为类的唯一属性。现在可以使用
了theQuest.incrementKey("option\(row)")