私はとても新しいです。 Firebaseデータベースのデータをコレクションビューに取り込もうとしています。 FirebaseからデータをフェッチするUsers varは、すべてのデータで正しく復帰します。なぜ私はUICollectionView
がNil
に戻ってくるのか理解しようとしています。UICollectionViewをFirebaseに接続する
self.usersCollectionView.reloadData()
とエラーがある:nil
を返します
fatal error: unexpectedly found nil while unwrapping an Optional value
その私のcollectionView
VAR私はクラッシュがこのラインで起こると思います。
セルにセルクラスを接続しました。
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に変更したときに何が起こるかを確認できますか? –
ありがとうジョーディ。私のコードは実際に動作します。その私のUICollectionView does notは、セルに詳細を表示します。申し訳ありませんが、私はそれが動作していないデータベースへの接続だと思った。私は印刷物(ユーザー)を行い、それをコンソールに印刷しました。 –
collectionViewが正しく作成されていないようです。あなたはストーリーボードでどのように接続しましたか? –