将侦听器添加到firestore

时间:2018-02-21 17:41:43

标签: objective-c swift firebase google-cloud-firestore

我知道this q/a绕过了firebase中的缓存,但是我想在firestore中做同样的事情,并且与听众一起这样做......

我目前的代码就是这样......

FIRQuery *query = [[db collectionWithPath:@"mycollection"] queryWhereField:@"uid" isEqualTo:user.uid];
[query addSnapshotListener:^(FIRQuerySnapshot *querySnapshot, NSError *error) {
    //...

这很好用,除了它很容易给我旧的数据(或者在源头删除后的数据)。我想做的就是......

if (/*some time has passed*/ || /*first time this launch*/) {
    // magic to force the query to bypass anything cached
}
FIRQuery *query = [[db collectionWithPath:@"mycollection"]; 
// and so on...

对其他问题的最佳看似答案建议使用交易......

[db runTransactionWithBlock:^ id(FIRTransaction *transaction, NSError **error) {
    // stuck

FIRTransaction只有一个与读取相关的方法,即getDocument:error:传递FIRDocumentReference *

此外 - 未来的编辑:我在Objective-c中写作,但我很乐意快速阅读建议。如果您决定删除swift标签,请解释某人如何用任何一种语言表达问题。 (请注意:声明"我们只使用语言标签来询问有关语言本身的问题"可证明是错误的。)

1 个答案:

答案 0 :(得分:0)

尝试绕过本地缓存并不是最好的服务,因为您不应该假设客户端有任何缓存的内容。 SDK完全管理缓存 - 它是作为优化提供的,因此您不需要为文档读取支付更多费用。

如果您需要对数据库中发生更改的事项进行审计跟踪,则应将该跟踪本身记录在数据库中,以便无论何时访问数据都无论数据是否正确。