Sto tentando di ricreare un nuovo progetto Firebase in cui si popola una vista tabella con i dati del database in tempo reale di Firebase che contengono collegamenti alle immagini nella memoria di Firebase.Popolare una vista insieme con i dati firebase
Posso popolare il progetto tutorial che è una vista tabella con i dati firebase. Ma con il mio progetto attuale si tratta di una vista insieme all'interno di un'estensione.
Ho ridotto la questione a mio variabili
var ref: FIRDatabaseReference!
var messages: [FIRDataSnapshot]! = []
var msglength: NSNumber = 10
private var _refHandle: FIRDatabaseHandle!
specificamente
var messages: [FIRDataSnapshot]! = []
Che credo sia un allineamento dei miei dati che ricevo da Firebase
Ho poi chiamo un funzione che dovrebbe popolare quella matrice nel mio viewdidload()
func loadPosts(){
self.messages.removeAll()
// Listen for new messages in the Firebase database
_refHandle = self.ref.child("messages").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
//print("1")
self.messages.append(snapshot)
//print(self.messages.count)
})
}
Il problema si verifica quando provo a popolare la vista delle raccolte poiché voglio lo scorrimento orizzontale. Uso un'estensione. Nell'estensione trovo che il mio array di valori è sempre 0, ma nella mia funzione loadPosts() il conteggio del mio> array è lo stesso valore della quantità di post che ho in firebase.
extension HomeViewController : UICollectionViewDataSource
{
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return messages.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
print(messages.count)
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(StoryBoard.CellIdentifier, forIndexPath: indexPath) as! InterestCollectionViewCell
// Unpack message from Firebase DataSnapshot
let messageSnapshot: FIRDataSnapshot! = self.messages[indexPath.row]
let message = messageSnapshot.value as! Dictionary<String, String>
let name = message[Constants.MessageFields.name] as String!
if let imageUrl = message[Constants.MessageFields.imageUrl] {
if imageUrl.hasPrefix("gs://") {
FIRStorage.storage().referenceForURL(imageUrl).dataWithMaxSize(INT64_MAX){ (data, error) in
if let error = error {
print("Error downloading: \(error)")
return
}
cell.featuredImageView?.image = UIImage.init(data: data!)
}
} else if let url = NSURL(string:imageUrl), data = NSData(contentsOfURL: url) {
cell.featuredImageView?.image = UIImage.init(data: data)
}
cell.interestTitleLabel?.text = "sent by: \(name)"
}
return cell
}
}
dovrei non essere utilizzare FIRDataSnapshot? Se è così qual è quella giusta da usare? O dovrei avvicinarmi al progetto in un'altra forma che non usa estensioni?
Dopo aver inserito gli oggetti nell'array, stai chiamando reloadData() sul tuo insiemeView? –
Oh wow, non lo ero. Tutto è appena popolato perfettamente! Grazie! @MacBellingrath – Mark
Grande! Ho intenzione di pubblicare una risposta. –