Ich versuche, Daten aus Firebase sortiert nach Zeitstempel zu ziehen und in einer Sammlungsansicht anzuzeigen.Zellen werden manchmal außer Betrieb geladen?
Hier ist die meiste Code Ich verwende:
static func loadPic(picture: String, loadSuccessBlock: @escaping (_ img: UIImage) -> Void) {
let requested = URLRequest(url: URL(string: picture)!)
URLSession.shared.dataTask(with: requested) {data, response, err in
if err != nil {
print(picture, err)
} else {
DispatchQueue.main.async {
if let imageToCache = UIImage(data: data!) {
MainVC.imageCache.setObject(imageToCache, forKey: picture as NSString)
loadSuccessBlock(imageToCache)
}
}
}
}.resume()
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollVCCell", for: indexPath) as! CollViewCell
let post = initiationsArray[indexPath.row]
let picture = NSString(string: post.imageURL!)
if let imageFromCache = MainVC.imageCache.object(forKey: picture as NSString) {
cell.cellImage.image = imageFromCache
} else {
MainVC.loadPic(picture: picture as String, loadSuccessBlock: { img in
// to prevent case of updating wrong cell
// we request to reload cell data
if (nil != self.collectionView.cellForItem(at: indexPath)) {
self.collectionView.reloadItems(at: [indexPath])
}
})
}
return cell
}
firstRef.queryOrdered(byChild: "timestamp").observeSingleEvent(of: .value) { (snapshot: FIRDataSnapshot) in
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
secondRef.child(snap.key).observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in
if let dict = snapshot.value as? Dictionary<String, Any>{
let key = snapshot.key
let post = Post(postKey: key, postData: dict)
DispatchQueue.main.async {
self.initiationsArray.insert(post, at: 0)
self.collectionView.reloadData()
}
}
})
}
}
Also das erste Bit ist, wie ich das Herunterladen bin Handhabung/Ziehen aus dem Cache, sind zweiter Bit meine cellForRow und dritte Bit ist mein Anruf zu Firebase.
Was macht es schwer zu debuggen ist, dass manchmal die Beiträge in Ordnung sind, und manchmal sind sie nicht. Normalerweise, wenn ich alle meine Firebase-Daten vollständig gelöscht habe und neu starte und dann mit dem Hinzufügen von Posts beginne, laden sie sich an der richtigen Position ein. Wenn ich am nächsten Tag zurückkomme oder die App schließe und neu lade, beginnen die Posts normalerweise entweder zufällig in der Liste oder beginnen am Ende der Liste einzufügen ... was nicht sinnvoll ist, weil ich ' m ausdrücklich zu sagen, um 0 einzufügen.
100% der Zeit, die ich vollständig zurückgesetzt meine Daten und neu starten die Posts korrekt laden obwohl.
Irgendwelche Ideen, wie man das behebt oder was könnte das verursachen?
Ich habe total vergessen, die Informationen tatsächlich zu sortieren. Ich habe vergessen, dass du dich nicht einfach auf den Firebase verlassen kannst, um es für dich zu sortieren. self.theArray.sort (by: {$ 0.timeStamp!> $ 1.timeStamp!}) hat es geschafft. – user6820041
Ah. Nun, das ist eine andere Sache. –