我對SO非常陌生。我正嘗試使用Firebase數據庫中的數據填充集合視圖。從Firebase獲取數據的用戶var會隨所有數據回來。我試圖找出爲什麼我的UICollectionView
回來Nil
。我覺得崩潰發生在這條線:將UICollectionView連接到Firebase
self.usersCollectionView.reloadData()
和錯誤是:
fatal error: unexpectedly found nil while unwrapping an Optional value
它我collectionView
無功即傳回了nil
。
我已將單元類連接到單元格。
import UIKit
import Firebase
class UserCollectionController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
var cellIdentifier = "User Cell"
var users = [User]()
@IBOutlet weak var usersCollectionView: UICollectionView!
func createAlert(title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: { (action) in
self.dismiss(animated: true, completion: nil)
}))
self.present(alert, animated: true, completion: nil)
}
func fetchUser() {
FIRDatabase.database().reference().child("users").observe(FIRDataEventType.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User()
user.name = dictionary["name"] as! String?
user.profileImageURL = dictionary["profileImageURL"] as! String?
self.users.append(user)
DispatchQueue.main.async(execute: {
self.usersCollectionView.reloadData()
})
}
print(snapshot)
}, withCancel: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
fetchUser()
}
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
return users.count
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! UserCollectionViewCell
let cellUsers = users[indexPath.item]
//cell.users = users[indexPath.item]
cell.usersNameLabel.text = cellUsers.name
if let profileImageURL = cellUsers.profileImageURL {
cell.usersImageView.loadImageUsingCacheWithUrlString(urlString: profileImageURL)
}
return cell
}
public func numberOfSections(in collectionView: UICollectionView) -> Int
{
return 1
}
}
class UserCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var usersImageView: UIImageView!
@IBOutlet weak var usersNameLabel: UILabel!
/*
// MARK: - Public API
var users: User! {
didSet {
updateUI()
}
}
// MARK: - Private
//@IBOutlet weak var featuredImageView: UIImageView!
//@IBOutlet weak var interestTitleLabel: UILabel!
func updateUI() {
if let profileImage = users.profileImageURL {
self.usersImageView?.loadImageUsingCacheWithUrlString(urlString: profileImage)
}
usersNameLabel?.text! = users.name!
}
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = 10.0
self.clipsToBounds = true
}
*/
}
這是我User
VAR:
import UIKit
class User: NSObject {
var name: String?
var email: String?
var password: String?
var profileImageURL: String?
}
如果對我的代碼有任何疑問,或者如果您需要更多的信息。請不要猶豫,問。
你能否嘗試看看當你改變FIRDataEventType.childAdded到FIRDataEventType.value會發生什麼? –
謝謝Jordi。我的代碼實際上工作。它的我的UICollectionView不會顯示細節的細節。對不起,我認爲這是連接到數據庫不工作。我做了一個打印(用戶),並在控制檯上打印了用戶。 –
看來你的collectionView沒有正確創建。你如何將它連接到故事板? –