2017-01-05 2 views
0

So habe ich ein iOS Firebase-Projekt, das wie Tinder funktioniert. Es gibt einen Knoten, der alle Produkte als Kinder enthält.Nach und nach Firebase-Kinder iOS herunterladen

Wenn der Benutzer die App eingibt, kann er/sie nach links wischen für Produkte, die sie nicht wollen und für diejenigen, die sie speichern möchten.

Mein Problem ist, dass derzeit mein Firebase-Projekt alle Produkte auf einmal herunterlädt, was offensichtlich für 100+ Produkte mit Bildern nicht durchführbar ist. Ich möchte ein System implementieren, das zuerst 3 Produkte herunterlädt. Wenn der Benutzer dann für das erste Produkt nach links/rechts wischt, lädt er ein anderes herunter und fügt es dem hinteren Teil der Liste hinzu, so dass immer ein Produktpuffer vorhanden ist.

Die Frage ist, wie bekomme ich Firebase, um eine .childAdded nur ausspucken, wenn der Benutzer wischt (meine Kinder sind alle .childByAutoId)?

Bedenken Sie, dass Produkte gelöscht werden können, daher ist es einfach nicht möglich, einen Index darüber zu führen, um welchen Artikel es sich handelt.

Vielen Dank.

+0

Was Sie tun, ist ziemlich Seitenumbruch; Während sich der Benutzer durch die Daten bewegt, werden mehr Daten geladen. Ob es sich um 1 gleichzeitig oder 3 gleichzeitig oder 10 um eine Tabelle zu füllen, ist der Prozess ungefähr gleich. Suchen Sie nach Firebase Pagination - es gibt viele Antworten und alternative Ansätze. – Jay

Antwort

0

Sie müssen mit jedem Element eine Art Marker speichern (z. B. einen Zeitstempel, wenn Sie die Elemente basierend auf der Erstellungszeit des Kindes schrittweise herunterladen möchten).

einfach Dann eine Abfrage wie folgt zu verwenden:

var startingValue: String = "" 
if itemsArray.count == 0 { 
    startingValue = Date() // start at the current date and work your way backwards 
} 
else { 
    startingValue = itemsArray.last.timestamp // last item we stopped at in the retrieval process 
} 

itemsRef.queryOrderedByChild("timestamp").queryStartingAtValue(startingValue).queryLimitedToFirst(numberOfItemsToBeRetrievedPerQuery).observeEventType(FIRDataEventType.value, withBlock: { (snapshot) in 
    // append the retrieved items to your array 
}) 

Beachten Sie, dass für diese zu arbeiten, um (zunächst die neuesten Produkte bekommen, die ich gehe davon ist, was Sie zu tun versuchen), Sie müssen die UNIX-Zeitstempel mit einem negativen Zeichen speichern (so würde es umgekehrt werden). So würde Ihre Struktur wie folgt aussehen:

"items" : { 
    "item1Key" : { 
     "itemName": "Item 1" 
     "moreItemData": "random data" 
     "timestamp": -1.57983164250361E12 
    }, 
    "item2Key" : { 
     "itemName": "Item 2" 
     "moreItemData": "random data" 
     "timestamp" : -1.42182335765741E12 
    }, 
    ... 
} 

Sie können feststellen, diese question ‚s Antwort hilfreich bei der Implementierung!

0

Die erste Sache, die in den Sinn kommt, ist, Sie einfach verfolgen, wie viele Elemente Sie derzeit in Puffer haben. Wenn es niedriger als das Minimum ist, werden Sie mehr herunterladen, Firebase führt alle Download-Vorgänge im Hintergrund aus, so dass Sie sich darüber keine Sorgen machen müssen. Sie können auch Schließungen auf den Zählern verwenden, um die Downloads zu automatisieren.

Um eine bestimmte Menge aus einer Liste der untergeordneten Knoten herunterzuladen, überprüfen Sie die Firebase-Abfragen. Sie werden zum Sortieren der an Sie zurückgegebenen Knoten sowie zum Abrufen von Knoten bei bestimmten Indizes verwendet.

Dies löst jedoch nicht das Problem, dass Knoten zu einem bestimmten Zeitpunkt potenziell gelöscht werden. Zu diesem Zweck könnten Sie versuchen, den Hashwert des aktuell angezeigten Elements zu berechnen und ihn mit einer Hashtabelle von Elementen zu vergleichen, die in der aktuellen Sitzung angezeigt wurden. Wenn eine Übereinstimmung gefunden wird, wurde dieses Element bereits angezeigt und es wurden einige Indizes in der Datenbank gemischt. (d. h. ein Artikel wurde gelöscht)

Nur ein Gedanke.

Verwandte Themen