2016-08-22 31 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中的单个观察结果触发的观察块内的阵列。 –