2017-06-19 1 views
0

Ich verspreche eine EASY :)die aktuellen Zeitstempel unter Verwendung aller Post abzufragen, bevor diese Zeit

Howdy, las ich bin zur Zeit stecken. Ich möchte alle Post abfragen, beginnend mit dem neuesten Post zuerst anstelle des ältesten Posts. Warum? Weil es die einzige Möglichkeit ist, die Paginierung in meine TableView einzufügen. (Was bedeutet, Nachladen, wenn der Benutzer auf den Boden bekommt)

Lets sagen, ich habe 10 Beiträge mit dem ältesten # 1 beginnen und die neueste # 10: 1,2, ..., 10 Wenn ich Abfrage beschränkt auf die ersten 5 Post bekomme ich [1,2,3,4,5] dann reverse ich das Array, die [5,4,3,2,1] auf meinem Tableview beginnend mit 5.

zeigen wird

AUSGABE: Das Problem ist, sobald der Benutzer an den unteren Rand der Tabellenansicht gelangt, wenn ich die nächsten fünf Beiträge ab dem Zeitstempel des letzten Beitrags abfrage, bekomme ich ... [6,7,8,9 , 1 0]

Aber jetzt meine Tabellenansicht korrigieren wird nicht mehr, wie es [5,4,3,2,1,10,9,8,7,6] zeigen Ich hoffe, dass, wenn Ich kann das aktuelle Gerätedatum als Zeitstempel verwenden und den gesamten Beitrag vorher wie unten gezeigt abfragen: Ich kann im Wesentlichen [10,9,8,7,6] dann erhalten, wenn Benutzer den Boden erreicht: [10,9, 8,7,6,5,4,3,2,1]

let todayTime. TimeInterval = NSDate() timeIntervalSince1970

  FIRDatabase.database().reference().child("post").child(animal).queryOrderedByValue().queryEnding(atValue: todayTime, childKey: "datePost").queryLimited(toLast: 5).observe(.value, with: {(snapshot) in 
+0

Schreiben Sie einfach Ihre Zeitstempel als negative Werte und alles andere fällt in Position. Ich habe eine Antwort auf eine andere Frage geschrieben, die [Negative Firebase Timestamp] (https://stackoverflow.com/questions/43203910/how-to-create-negative-firebase-timestamp-in-swift/43379902#43379902) – Jay

+0

helfen kann Erstmal danke für die Antwort !! Aber hehe, deine Antwort ist sehr kompliziert - ich kann die Zeitstempel nicht negativ bewerten, da sie auf der Feuerbasis gemacht werden. Meinst du von dir antwortest auf deinen vorherigen Beitrag, dass ich den Timestamp, der auf firebase gemacht wurde, abfrage, dann mache ich es negativ? Entschuldigung nicht ein englischer Muttersprachler – 24hrcoder

+0

Wie in der anderen Antwort angegeben, können Sie nicht direkt einen Timestamp von Firebase (im Code) erhalten, aber wenn es geschrieben wird (nach dem Code in meiner Antwort), können Sie den Knoten beobachten, in den geschrieben wird Dadurch erhalten Sie den Zeitstempel in einem Snapshot. Sie können es dann negativ (im Code) machen und es auf Ihre Knoten schreiben, die eine Bestellung benötigen. Bei einem negativen Zeitstempel erfolgt die Sortierung über diesen Zeitstempelknoten und natürlich in der richtigen Reihenfolge, wobei das neueste "oben" ist. Also wird die Reihenfolge -10 (neuestes), -9, -8 ....- 1 sein. Also lies in -10 bis -5, dann -4 bis -1 etc. – Jay

Antwort

1

messages 
    msg_0 
    msg: "oldest message" 
    timestamp: -1 
    msg_1 
    msg: "hello" 
    timestamp: -4 
    msg_2 
    msg: "hello" 
    timestamp: -2 
    msg_3 
    msg: "newest message" 
    timestamp: -5 
    msg_4 
    msg: "hello" 
    timestamp: -3 

und den folgenden Code die folgende Struktur gegeben

let messagesRef = self.ref.child("messages") 
let queryRef = messagesRef.queryOrdered(byChild: "timestamp") 
queryRef.observe(.childAdded, with: { snapshot in 
    let key = snapshot.key 
    print(key) 
}) 

der Ausgang

msg_3 <-newest message 
msg_1 
msg_4 
msg_2 
msg_0 <-oldest message 

Wie Sie sehen werden, ist msg_3 die neueste Nachricht und erscheint ‚bei der top 'dh es ist der erste Snapshot, den die Abfrage erhält. Wenn Sie ein Array füllen, das als Datenquelle verwendet werden soll, wird dies bei Index 0 hinzugefügt, dann wird msg_1 bei Index 1 usw. gesetzt.

Wenn der Benutzer scrollt und Sie die nächsten 5 laden möchten, wäre es Zeitstempel 6 bis 10, wobei 10 der neueste ist.

Angenommen, Sie möchten die ältesten zwei Nachrichten laden.Hier ist die Abfrage

let queryRef = messagesRef.queryOrdered(byChild: "timestamp") 
          .queryStarting(atValue: -3, childKey: "timestamp") 
          .queryEnding(atValue: -1, childKey: "timestamp") 

das Ergebnis

msg_2 
msg_0 

dann wollen wir in den nächsten ältesten zwei

let queryRef = messagesRef.queryOrdered(byChild: "timestamp") 
          .queryStarting(atValue: -5, childKey: "timestamp") 
          .queryEnding(atValue: -3, childKey: "timestamp") 

die uns

msg_1 
msg_4 

Offensichtlich ich Substituten laden -5, -4 usw. für eine Tat Zeitstempel, aber es würde genauso funktionieren.

+0

Hey Jay der Sache ist, ich weiß nicht, was der ** Endwert ** ist hehehehe ... Ich habe versucht, die aktuelle Zeit und sogar einfach nur 1 ohne Erfolg? Last letzten Tipp: – 24hrcoder

+0

@ 24hrcoder Wenn die Antwort geholfen hat, bitte akzeptieren Sie die Antwort, so kann es anderen helfen! – Jay

+0

Yeah Entschuldigung, ich habe versucht, mehrere Male zu mögen, aber es sagt, "Stimmen von denen mit weniger als 15 Wiederholungen abgegeben werden aufgezeichnet, aber nicht die öffentlich angezeigte Post Punktzahl ändern" – 24hrcoder

Verwandte Themen