我对SO很新。我尝试使用Firebase数据库中的数据填充集合视图。从Firebase获取数据的Users var会返回所有数据。我想弄清楚为什么UICollectionView
会回复Nil
。我认为崩溃发生在这一行:
self.usersCollectionView.reloadData()
,错误是:
致命错误:在解包可选值时意外发现nil
我的collectionView
var返回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?
}
如果对我的代码有任何疑问或者您需要更多信息。请不要犹豫。
答案 0 :(得分:1)
似乎您的collectionView未正确创建。你是如何在故事板中将它连接起来的?
您正在尝试重新加载collectionView,然后才能正确设置。