【发布时间】:2017-07-13 22:21:43
【问题描述】:
我正在尝试从 Firebase 的子子项中检索所有值以显示在集合视图的标签中。 我必须获得到 Collection View Cell 的连接插座,并拥有一个具有图像和三个标签的 View 控制器。 在最后一个标签中,我想从 firebase child 中获取所有价格值。
Firebase 结构
视图控制器
检索值
import UIKit
import Firebase
class CakeViewController: UIViewController , UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var manuCake: UIBarButtonItem!
@IBOutlet weak var cakeCollectionView: UICollectionView!
struct cakeObject {
var cakeImage : UIImage
var cakeEnglichName: String
var cakeUrduName : String
var cakeRate : String
var key : String
}
var cakeArray : [cakeObject] = []
override func viewDidLoad() {
super.viewDidLoad()
manuCake.target = revealViewController()
manuCake.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
let ref = FIRDatabase.database().reference().child("Hyderabad").child("Bakery").child("Cake")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
print(snapshot.value as Any)
let cakeData = snapshot.value as! [String:String]
for (key,value) in cakeData{
//Can set cakeImage and cakeUrduName as per your project
cakeArray.append(cakeObject(cakeImage: #imageLiteral(resourceName: "bakery_almond_cake"),cakeEnglinhName: key, cakeUrduName: "آلمنڑ کیک", cakeRate: "\(value)/kg"))
}
self.cakeCollectionView.reloadData()
}
})
cakeCollectionView.delegate = self
cakeCollectionView.dataSource = self
// Do any additional setup after loading the view.
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return cakeArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CakeCollectionViewCell", for: indexPath)
as! CakeCollectionViewCell
cell.cakeImageView.image = cakeArray[indexPath.item].cakeImage
cell.cakeEngLabs.text = cakeArray[indexPath.item].cakeEnglichName
cell.cakeUrLabs.text = cakeArray[indexPath.item].cakeUrduName
cell.cakeRateLabs.text = cakeArray[indexPath.item].key
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
最新错误
同类的另一种方式
import UIKit
import Firebase
class CakeViewController: UIViewController , UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var manuCake: UIBarButtonItem!
@IBOutlet weak var cakeCollectionView: UICollectionView!
struct cakeObject {
var cakeImage : UIImage
var cakeEnglichName: String
var cakeUrduName : String
//var cakeRate : String
var key : String
}
var cakeArray : [cakeObject] = []
override func viewDidLoad() {
super.viewDidLoad()
manuCake.target = revealViewController()
manuCake.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
let ref = FIRDatabase.database().reference().child("Hyderabad").child("Bakery").child("Cake").child("Almond_Cake")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
print(snapshot.value as Any)
let cakeData = snapshot.value as! [String:String]
for (key,value) in cakeData{
//Can set cakeImage and cakeUrduName as per your project
self.cakeArray.append(cakeObject(cakeImage: #imageLiteral(resourceName: "bakery_almond_cake"),cakeEnglichName: key, cakeUrduName: "آلمنڑ کیک", key: "\(value)/kg"))
}
self.cakeCollectionView.reloadData()
}
})
cakeCollectionView.delegate = self
cakeCollectionView.dataSource = self
// Do any additional setup after loading the view.
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return cakeArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CakeCollectionViewCell", for: indexPath)
as! CakeCollectionViewCell
cell.cakeImageView.image = cakeArray[indexPath.item].cakeImage
cell.cakeEngLabs.text = cakeArray[indexPath.item].cakeEnglichName
cell.cakeUrLabs.text = cakeArray[indexPath.item].cakeUrduName
cell.cakeRateLabs.text = cakeArray[indexPath.item].key
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
【问题讨论】:
-
您能否通过添加
print(snapshot.value)来简单地添加snapshot.value的控制台日志。 -
io 应该在哪里做呢?
-
在
if snapshot.exists() {行之后添加print(snapshot.value)并在此处添加它的控制台日志。 -
用警告更新问题
-
我认为
fruitArray[indexPath.item]["key"]应该是fruitArray[indexPath.item].key现在评论其他代码并运行应用程序,然后添加我要求的打印语句的控制台日志。
标签: arrays swift xcode firebase uicollectionview