2016-03-21 10 views
0

私はトップ10リストを作成しています。私は、価値を持つためにある項目の価値を必要とし、ある人が同意するたびにその価値を増やす必要があります。現在は更新されていませんが、同じ値を追加してすぐに消滅しようとしています。ここに私のFirebaseスタックがあります....Firebaseの値はSwiftでインクリメントされませんか?

TopVideos--> 
yWfsla_Uh80--> 
    Value: 1 
    description: "Download on iTunes : KOR https://itunes.apple.c..." 
    imageString: "https://i.ytimg.com/vi/yWfsla_Uh80/default.jpg" 
    rank: 1 
    title: "EXO_CALL ME BABY_Music Video" 
    user: "6ef370d4-a1bd-48ce-9ae0-93d2e20f3bc8" 
    videoID: "yWfsla_Uh80" 

"値"の子ノードを増やしたいのですが、それは起こっていません。ここに私のコードがあります....

topVideoRef.childByAppendingPath("Value").runTransactionBlock({ 
       (currentData:FMutableData!) in 
       var value = currentData.value as? Int 
       if value == nil { 
        value = 0 
       } 
       currentData.value = value! + 1 
       return FTransactionResult.successWithValue(currentData) 
      }) 

私はその手紙のFirebaseガイドに従っていますが、私は何か不足しているかもしれません。 BTW ...あなたが答えを知っているならば、値を減らす方法も含めてください。ありがとうございました。

* UPDATE *

私はそう.....

vidRank = Int(self.rankValue.text!)! 
let vidArray = ["user" : self.ref.authData.uid, "videoID": self.videoId, "rank": self.vidRank, "title": self.vidTitleText, "description": self.vidDescription, "imageString": self.vidIMG] 
let topVideoRef = self.ref.childByAppendingPath("TopVideos/\(self.videoId)") 
topVideoRef.setValue(vidArray) 
+0

'topVideoRef'の作成方法を表示できますか? –

+0

@DavidEast投稿を更新しました。また、私は 'value!++'と 'currentData.value.updateChildValues'を試しました。私はそれらを間違って書いたかもしれませんが。 –

+0

成功コールバックは何を言わなければなりませんか?エラーはありますか?それはコミットですか?それが成功しなかったとあなたはどのように判断しましたか?データベースの現在の値は何ですか?認証状態とは何ですか?どのようなセキュリティルールが適用されていますか? [How to Ask](http://stackoverflow.com/help/how-to-ask)と[mcveを作成する](http://stackoverflow.com/help/mcve)を参照してください。 – Kato

答えて

0

@Jayさん、ありがとうございました。 Firebaseのデータをより深く理解することができました。検索と保存。私はボタンを追加してから更新するためにしばらくの間立ち往生したが、それは連続したループで捉えられた。一度私はobserveSingleEventofTypeを使用してすべてが一緒に来た。ここで私が最初にユーザーのためのビデオを保存するよ、私の完成コード、ビデオの場合は#1のビデオをチェックし、保存またはそこからのアップデートのいずれかが何かが思わたら、コメントを残してください...

@IBAction func finalSaveBTN(sender: AnyObject) 
    { 
     vidRank = Int(self.rankValue.text!)! 
     let vidArray = ["user" : self.ref.authData.uid, "videoID": self.videoId, "rank": self.vidRank, "title": self.vidTitleText, "description": self.vidDescription, "imageString": self.vidIMG] 
     let videoRef = self.ref.childByAppendingPath("UserVideo/\(self.ref.authData.uid)/Vid\(vidRank)") 
     videoRef.setValue(vidArray) 

     if self.vidRank == 1 
     { 
      let findTopRef = self.ref.childByAppendingPath("TopVideos/\(self.videoId)") 
      findTopRef.queryLimitedToFirst(1) 
       .observeSingleEventOfType(.Value, withBlock: { snapshot in 
        if snapshot.value is NSNull 
        { 
         print("Save") 
         self.clickedButton1() 
        } 
        else 
        { 
         print("Updated") 
         self.clickedButton2() 
        } 
       }) 
     } 
    } 

    func clickedButton1() 
    { 
     print("Button1Action") 
     let vidArray = ["Value" : 1, "videoID": self.videoId, "title": self.vidTitleText, "description": self.vidDescription, "imageString": self.vidIMG] 
     let topVideoRef = self.ref.childByAppendingPath("TopVideos/\(self.videoId)") 
     topVideoRef.setValue(vidArray) 
    } 

    func clickedButton2() 
    { 
     print("Button2Action") 
     let topVideoRef = self.ref.childByAppendingPath("TopVideos/\(self.videoId)") 
     topVideoRef.childByAppendingPath("Value").runTransactionBlock({ 
      (currentData:FMutableData!) in 
      var value = currentData.value as? Int 
      if value == nil { 
       value = 0 
      } 
      currentData.value = value! + 1 
      return FTransactionResult.successWithValue(currentData) 
     }) 
    } 

ですオフ。ところで、#1 Vidが既に存在するならば、私はまだ価値を下げる必要があります。

+0

私の答えがあなたを助けたら、それを受け入れてください:-)また、自分の質問に答えるのではなく、ソリューションに質問に追加情報を追加したいかもしれません。 – Jay

0

ようvideoRefを作成しています私は、テキストとフィールドを置き換えたコードを修正して、二つの機能を作成し、ウィンドウ上の2つのボタンにリンク

コードを実行すると、動作するように見えます。

func clickedButton1() { 

    print("Button1Action") 

    let myRootRef = Firebase(url:"https://your-app.firebaseio.com") 

    let vidArray = ["user" : "some user id", 
     "videoID": "some video id", 
     "rank": "some rank", 
     "title": "a title", 
     "description": "a description", 
     "imageString": "an image"] 


    let topVideoRef = myRootRef.childByAppendingPath("TopVideos/\("vid_id_0")") 
    topVideoRef.setValue(vidArray) 

} 

及び第二の機能

func clickedButton2() { 

    print("Button2Action") 

    let myRootRef = Firebase(url:"https://your-app.firebaseio.com") 

    let topVideoRef = myRootRef.childByAppendingPath("TopVideos/\("vid_id_0")") 

    topVideoRef.childByAppendingPath("Value").runTransactionBlock({ 
     (currentData:FMutableData!) in 
     var value = currentData.value as? Int 
     if value == nil { 
      value = 0 
     } 
     currentData.value = value! + 1 
     return FTransactionResult.successWithValue(currentData) 
    }) 

} 

ボタン1をクリックすると、初期データが書き出されます。

ボタン2は、値ノードをクリックするたびに、私はどちらかあなたには、いくつかの時点で全体のノードを上書きしていることを推測しています。1.

インクリメントされ、またはあなたが終了したときに、それを取り除くの価値に添付onDisconnectがありますアプリ。

または...これはnilに設定されているため、表示される内容になります。それは突然消える価値を持っています。

+0

私のソリューションとコードの有効性についてのコメントを参照してください。 –

関連する問題