-1

我正在尝试检索 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 element failed to match the Swift Array Element type

接下来,我尝试分解 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()

很明显,以这种方式增加 theVotes 不会影响检索到的任务,保存检索到的任务不会反映任何投票的更新。

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

4

2 回答 2

0

仅供参考 - 我通过消除选项数组来解决这个问题,而是让每个选项成为该类的唯一属性。现在可以使用

theQuest.incrementKey("option\(row)")
于 2015-04-20T19:04:02.920 回答
0

Swift 不知道options. 正如 Paulw11 所说,您需要转换为正确的类型。如果 options 是一个PFObjects 数组(如您的代码所示),则更改

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)
}

可能会解决您的问题。

于 2015-04-16T03:06:04.837 回答