检索和递增Parse对象的问题

时间:2015-04-15 22:47:43

标签: ios swift parse-platform pfquery pfobject

我正在尝试检索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并不能反映任何投票更新。

关于如何获得理想结果的任何想法?

2 个答案:

答案 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)")