2016-08-22 32 views
0

我不知道我在做什麼錯誤!我只是想從Firebase數據庫獲取數據並對每個結果進行迭代並將它們放入數組中。我嘗試了不同的方法。但是他們都返回一次一個結果到數組中的結果。導致看起來像這樣的陣列:將Firebase數據追加到Swift中的陣列

["1"] 
["1","2"] 
["1","2","3"] 
["1","2","3","4"] 

正如你所看到的,它每次迭代時都會添加一個對象。 以下是我有:

let ref = FIRDatabase.database().reference().child("users") 
ref.observeEventType(.ChildAdded, withBlock: { snapshot in 
    userUrl = snapshot.value?["profile_image_1"] as! String 
    imageArray.insert(userUrl, atIndex: 0) 
}, withCancelBlock: { error in 
    print(error.description) 
}) 

,我也嘗試過這樣的:

let userUrl = (snapshot.value.objectForKey("profile_image_1")) as! String 
imageArray.append(userUrl) 

我只想把每一個結果到一個數組我可以一次訪問數據,完成外塊。

["1","2","3","4"] 

任何幫助將是偉大的!

數據庫: Firebase Database Structure

回答

0

嘗試這樣:

var imageArray = [] 

func appendData(){ 
    let ref = FIRDatabase.database().reference().child("users") 

    ref.observeEventType(.Value, withBlock: { snapshot in 
     var tempImageArray = [] 

     for user in snapshot.children { 
      userUrl = user.value?["profile_image_1"] as? String 
      self.imageArray.insert(userUrl, atIndex: 0) 
      tempImageArray.append(broadcastItem) 
     } 

     self.imageArray = tempImageArray 
    }) 
} 

編輯:我更新了代碼,請試試這個。

+0

這就是我得到的:致命錯誤:意外地發現零,而解包可選值'let userUrl = snapshot.value?[「profile_image_1」] as! String' – Barrett

+0

您可以在Firebase中添加數據庫結構的屏幕截圖嗎?這個錯誤看起來像「profile_image_1」不返回一個字符串,但取決於你的結構,它可以是一個簡單的修復。 –

+0

我在我的問題中添加了我的數據庫的圖像。 – Barrett

0

這不直接回答這個問題,但我假設你想在追加所有內容後訪問最終數據。

我有同樣的問題,我通過做同樣的事情你做的事情,然後我在完成塊內創建一個dispatchQueue。

​​

我希望這會有所幫助。

+0

此代碼不起作用,因爲您仍在訪問由Firebase中的單個觀察結果觸發的觀察塊內的陣列。 –