Ich versuche, ein neues Firebase-Projekt neu zu erstellen, in dem Sie eine Tabellenansicht mit Daten aus der Firebase-Echtzeitdatenbank füllen, die Verknüpfungen zu Bildern im Firebase-Speicher enthalten.Füllen einer Sammlungsansicht mit Firebase-Daten
Ich kann das Tutorial-Projekt, das eine Tabellenansicht mit Firebase-Daten ist, füllen. Bei meinem aktuellen Projekt handelt es sich jedoch um eine Sammlungsansicht innerhalb einer Erweiterung.
Ich habe
die Frage auf meine Variablen eingrenzenvar ref: FIRDatabaseReference!
var messages: [FIRDataSnapshot]! = []
var msglength: NSNumber = 10
private var _refHandle: FIRDatabaseHandle!
speziell
var messages: [FIRDataSnapshot]! = []
Was ich denke, dass ein Array meiner Daten, die ich von Feuerbasis
bekomme ich ein dann rufen Funktion, die dieses Array in meinem Viewdidload() füllen sollte
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)
})
}
Das Problem tritt auf, wenn ich versuche, meine Sammlungen anzuzeigen, da ich horizontales Scrollen möchte, verwende ich eine Erweiterung. In der Erweiterung finde ich, dass mein Array von Werten immer 0 ist, aber in meiner Funktion loadPosts() ist die Anzahl von meinem> Array der gleiche Wert wie die Anzahl von Posts, die ich in Firebase habe.
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
}
}
Sollte ich nicht FIRDataSnapshot verwenden? Wenn ja, welches ist das richtige? Oder sollte ich das Projekt in einer anderen Form angehen, ohne Erweiterungen zu verwenden?
Nachdem Sie die Objekte in Ihr Array eingefügt haben, rufen Sie reloadData() in Ihrem collectionView auf? –
Oh wow, war ich nicht. Alles war einfach perfekt! Vielen Dank! @MacBellingrath – Mark
Großartig! Ich werde eine Antwort posten. –