-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要素が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()

おそらく、この方法で theVotes をインクリメントしても retrieveQuest に影響を与えないことは明らかです。

どうすれば望ましい結果を得ることができるかについてのアイデアはありますか?

4

2 に答える 2

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 に答える