![](/img/trans.png)
[英]How to fetch specific data from Firestore and update it in Objective-C
[英]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.