2016-08-23 32 views
1

litte quiz appを設計していますが、ゲームデータを取得する際に問題があります。あなたが写真で見ることができるようにSwiftのFirebaseからデータを構造化して取得する際の問題

data structure

は、私は多くの単一のゲームが含まれているJSONオブジェクトを持っています。各ゲームには一意のIDがあります。私の最初の問題は、各ゲームを複数の言語で利用できることです。私は穴のスナップをダウンロードして、各ゲームをスローすることができることを知っていますが、それはアプリが成長している間、本当に長いロード時間を意味します。私は上記のJSONから次のようなデータを取得する必要が

  • ランダムゲームウィッヒは、特定の言語で提供されています(キーエンを持っている必要があります短い形式で

    「デ」

0でまだ

  • 「EN」で利用可能なすべてのゲームではなく)例えば

    JSONのデータを再構成する方が簡単な場合は、教えてください。

    私を助けてくれてありがとう。あなたの最初の部分に

  • +0

    これらのsingleGamesのid、for'ループをどうやって取得していますか?または彼らはどこかに格納されていますか? – Dravidian

    +0

    @Dravidian私が知っている唯一の方法は、穴のスナップショット(すべての質問)をダウンロードしてから、それらをアプリでループすることです。それはうまくいくでしょうが、何をプレイするかのすべての質問をダウンロードすることはかなりダンプです。 –

    +0

    はい、しかし、私はあなたがそれらをナビゲートするためにあなたの全体のスナップをダウンロードしなければならないと思う 'autoID'だと私は尋ねている。 – Dravidian

    答えて

    1

    回答: - あなたは私はあなたがまた別のlanguagesBasedノードにごsingleGames IDを保存示唆する反復時間を節約しようとしているので、あなたの第二部 については

    let enRef = FIRDatabase.database().reference().child("singleGames").child(singleGamesUID).child("en") 
    
        enRef.observeEventType(.Value, withBlock: {(snap) in 
        if let enQuizQuestion = snap.value as? [String:AnyObject]{ 
          //Question exists : Retrieve Data 
    
         }else{ 
    
         //Question in english doesn't exist 
        } 
    }) 
    

    は、コマンドがありますfirebaseにあなたの子ノードの中で、いくつかはkeyValuesを検索することができますが、私はもう少し時間がかかるかもしれません検索アルゴリズムを実行することだと思うでもということ: -

    appServerName:{ 
        singleGames :{ 
         uid1:{...... 
          ...... 
           ...}, 
         uid2:{...... 
          ...... 
           ...}, 
         uid3:{...... 
          ...... 
           ...} 
          }, 
        enQuestions:{ 
         uid3 : true 
          } 
        deQuestions:{ 
         uid1 : true, 
         uid2 : true 
         } 
        } 
    

    いいえあなたがしなければならないこと: -

    let rootRef = FIRDatabase.database().reference().child("deQuestions").observeEventType(.Value, withBlock: {(qSnap) in 
    
        if let qDict = qSnap.value as? [String:AnyObject]{ 
          for each in qDict as [String:AnyObject]{ 
           let deUID = each.0 
          } 
         }else{ 
    
         //No question in dutch language 
        } 
        }) 
    
    +0

    それが助けがあれば答えを受け入れる:) – Dravidian

    関連する問題