簡體   English   中英

如何在 firestore objective-c 上設置/更新數據時以秒為單位獲取 Firebase 服務器時間?

[英]How to get Firebase server time in seconds while set/update data on firestore objective-c?

在 firestore 上設置/更新數據時,我們面臨有關時間戳的問題。 我們想要以秒為單位的實際 firebase 服務器時間戳,但是通過使用[[FIRTimestamp timestamp].seconds]給我們以秒為單位的時間戳,但系統日期不是實際服務器日期。

那么我們如何在設置/更新數據時獲取應用程序的服務器時間戳呢? 我們也使用[FIRServerValue timestamp]但它以字典格式[".sv":"timestamp"]給出結果。 所以我們嘗試通過以下方式從這本字典中獲取秒數:

NSLog(@"%ld",(NSInteger)[FIRServerValue timestamp]/1000); //105827998577

但是我們得到的這個時間戳是錯誤的。

您可以使用創建自己的全局時間戳

let kFirebaseServerValueTimestamp = [".sv":"timestamp"]

然后您將能夠以相同的方式使用kFirebaseServerValueTimestamp

但是您只能將其用作節點的值或優先級。 您將無法將其設置為鍵名。

通常,在字典上調用 allKeys 並不能保證順序。 但是,如果您在節點上使用 childByAutoID,則可以通過按字典順序對 allKeys 返回的 NSArray 進行排序來恢復正確的順序。 這樣的事情會起作用:

[ref observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
    NSDictionary *value = snapshot.value;
    NSLog(@"Unsorted allKeys: %@", value.allKeys);
    NSArray *sortedAllKeys = [value.allKeys sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"Sorted allKeys: %@", sortedArray);
}];

這類似於按字母順序對 NSArray 進行排序,但是在對自動生成的 ID 進行排序時,您不希望進行本地化或不區分大小寫的排序,因此您使用 compare: 而不是 localizedCaseInsensitiveCompare:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM