Ale*_*ini 15 timestamp ios firebase
我有一个使用Firebase的iOS应用程序,目前有一些字典,其中的键是NSDate对象.这个问题的一个明显问题是NSDate从设备的系统时间中抽取,这不是通用的.
有了这个,使用Firebase的iOS API获取服务器时间戳(类似于Web API的Firebase.ServerValue.TIMESTAMP)的最佳方法是什么,以便我可以按时间顺序对字典键进行排序?
我也知道childByAutoID生成的ID的时间顺序性质,但我无法弄清楚在代码中对这些ID进行排序的正确方法.虽然它们可能按时间顺序返回,但是任何时候像allKeys一样调用它们,命令就会消失.
任何有关此问题的帮助将不胜感激!
小智 29
更新:在Firebase 3.0 + Swift中,您可以使用
FIRServerValue.timestamp().在Objective-C中,这是[FIRServerValue timestamp].
在Swift中,您现在可以使用FirebaseServerValue.timestamp()Firebase 2.0.3+(3.0之前).
Firebase.ServerValue.TIMESTAMP在iOS中的等价物是kFirebaseServerValueTimestamp.现在,这只适用于Objective-C而不适用于Swift.
在Swift中,您可以创建自己的全局时间戳
let kFirebaseServerValueTimestamp = [".sv":"timestamp"]
Run Code Online (Sandbox Code Playgroud)
然后你就可以以kFirebaseServerValueTimestamp同样的方式使用.
但是您只能将其用作节点的值或优先级.您将无法将其设置为密钥名称(尽管我不相信您也可以在Web API中使用).
通常,调用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);
}];
Run Code Online (Sandbox Code Playgroud)
这类似于按字母顺序排序NSArray,但在排序自动生成的ID时,您不希望对本地化或不区分大小写的排序,因此您使用compare:而不是localizedCaseInsensitiveCompare:
小智 5
警告:似乎时间戳是在您的对象保留在 Firebase 中之后添加的。这意味着,如果您在对象保存的位置设置了.Value事件侦听器,它将被触发两次。一次用于将初始对象存储在该位置,另一次用于添加时间戳。为这个问题苦苦挣扎了好几天:(
对于其他无法弄清楚为什么他们的事件侦听器触发两次/多次的人来说,这是有用的信息!
| 归档时间: |
|
| 查看次数: |
11132 次 |
| 最近记录: |