Wie bekomme ich eine server-Zeitstempel aus der Feuerstellung der iOS-API?
Habe ich eine iOS-app, die mithilfe der Feuerstellung und hat derzeit ein paar Wörterbücher mit einem Schlüssel NSDate-Objekte. Das offensichtliche Problem mit diesem ist, dass NSDate zeichnet das Gerät die system-Zeit, die nicht universal ist.
Mit, dass, was ist der beste Weg, um eine server-timestamp (ähnlich wie FB.ServerValue.Die ZEITMARKE für die Web-API) mit FB die iOS-API, so dass ich kann irgendwie mein Wörterbuch Schlüssel chronologisch?
Ich bin mir auch bewusst von der zeitlichen Natur der generierten IDs durch childByAutoID, aber ich kann nicht herausfinden, den richtigen Weg zu Sortieren, diese in code. Während Sie zurückgegeben werden können, in chronologischer Reihenfolge, jedes mal so etwas wie allKeys aufgerufen wird, wird die Bestellung geht aus dem Fenster.
Jede Hilfe mit diesem Problem wäre sehr dankbar!
- Fand dieses kleine tool - github.com/freak4pc/NSDate-ServerDate - aber es wäre immer noch schön zu wissen, ob es irgendeine Lösung, die FB bietet für diese.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update: In Feuerstellung 3.0 + Swift, die Sie verwenden können
FIRServerValue.timestamp()
. In Objective-C das ist[FIRServerValue timestamp]
.Swift, jetzt können Sie
FirebaseServerValue.timestamp()
mit FB 2.0.3+ (vor 3.0).Äquivalent für
Firebase.ServerValue.TIMESTAMP
im iOS istkFirebaseServerValueTimestamp
. Jetzt funktioniert dies nur für Objective-C und Swift nicht.In Swift erstellen Sie Ihre eigenen globalen timestamp mit
und dann werden Sie in der Lage zu verwenden
kFirebaseServerValueTimestamp
in der gleichen Weise.Aber Sie können nur diese als den Wert oder die Priorität eines Knotens. Sie werden nicht in der Lage, um es einrichten als der name des Schlüssels (obwohl ich nicht glaube, Sie könnten in der Web-API entweder).
Im Allgemeinen wird der Aufruf
allKeys
auf ein Wörterbuch die nicht garantieren die Ordnung. Aber wenn SiechildByAutoID
an einem Knoten, können Sie wieder die richtige Bestellung durch die Bestellung der NSArray zurück durchallKeys
lexikographisch. So etwas wie dies funktionieren würde:Dies ist ähnlich der Sortierung eine NSArray alphabetisch, aber beim Sortieren der automatisch generierte IDs, die Sie tun nicht wollen lokalisierte oder groß-und Kleinschreibung Sortieren, so dass Sie verwenden
compare:
stattlocalizedCaseInsensitiveCompare:
Als der Feuerstellung 4.0 können Sie ServerValue.timestamp()
Beispiel:
Einschränkung: Scheint, wie der timestamp wird Hinzugefügt NACH Ihr Objekt persistiert wird in der Feuerstellung. Dies bedeutet, dass, wenn Sie eine .Wert - Ereignis-listener eingerichtet, auf der Lage Ihr Objekt persistent ist, wird es ausgelöst werden ZWEIMAL. Einmal für das erste Objekt wird an dem Speicherort gespeichert, und wieder für den Zeitstempel Hinzugefügt wird. Kämpfte mit diesem Problem seit Tagen 🙁
Hilfreiche Informationen für alle anderen, die nicht herausfinden können, warum Ihre Ereignis-Listener ausgelöst werden doppelt/mehrfach!
Erhalten Sie Zeitstempel mit FIRServerValue.timestamp().
Aber, Weil der FIRServerValue.timestamp () - listener wird aufgerufen, zwei mal. Hörer wird zweimal aufgerufen.