【问题标题】:Problems with structuring and retrieving data from Firebase in Swift在 Swift 中从 Firebase 结构化和检索数据的问题
【发布时间】:2016-12-30 12:09:56
【问题描述】:

我正在设计一个小测验应用程序,但在检索游戏数据时遇到了问题。

正如您在图片中看到的,我有一个 JSON 对象,其中包含许多单个游戏。每个游戏都有一个唯一的 id。我的第一个问题是每个游戏都可以有多种语言版本。我知道我可以下载洞孔快照,然后循环投掷每个游戏,但这意味着在应用程序增长时加载时间非常长。

简而言之:

我需要从上面的 JSON 中检索以下数据:

  • 以特定语言提供的随机游戏(例如需要有 en 键)

  • 所有在“en”中可用但在“de”中还没有的游戏

如果在 JSON 中重构数据更容易,请告诉我。

感谢您帮助我。

【问题讨论】:

  • 你是如何检索那些 singleGames id 的`for` 循环的?还是它们存储在某个地方?
  • @Dravidian 我只想说我知道的唯一方法是下载洞快照(所有问题),然后在应用程序中循环遍历它们。这会奏效,但我认为每次你玩什么时下载所有问题都很垃圾。
  • 是的,但我要问的是,如果它们是 autoID 的,我认为你必须下载整个快照才能浏览它们..

标签: ios json swift firebase firebase-realtime-database


【解决方案1】:

回答你的第一部分:-

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

第二部分 由于您正在尝试节省迭代时间,我是否建议您也将 singleGames id 保存在单独的 languagesBased 节点中,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
     }
   })

【讨论】:

  • 如果有帮助,请接受答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多