gpt4 book ai didi

swift - 有没有办法只为一个集合启用离线持久性,而不是其他集合?

转载 作者:行者123 更新时间:2023-12-04 17:15:00 25 4
gpt4 key购买 nike

我在我的 Firestore 数据库中设置了两个集合:

let COLLECTION_POSTS = Firestore.firestore().collection("posts")
let COLLECTION_USERS = Firestore.firestore().collection("users")

COLLECTION_POSTS 中,将保存用户的社交帖子(例如 Facebook 风格的帖子)。它可以有图片,所以我不想让这些帖子缓存在本地。但是,我将允许缓存来自 COLLECTION_USERS 的数据。无论如何,它不会占用太多硬盘空间。

所以我在AppDelegate.swift中写了这样一段代码:

let settings = FirestoreSettings()

settings.isPersistenceEnabled = false

COLLECTION_POSTS.firestore.settings = settings

但是我遇到了这个错误信息:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'FIRESTORE INTERNAL ASSERTION FAILED: Firestore instance has already been started and its settings can no longer be changed. You can only set settings before calling any other methods on a Firestore instance.'

有没有办法选择性地拒绝 Firestore 中每个集合的离线持久化?

最佳答案

不幸的是,不可能在每个集合级别上控制缓存。基于磁盘的持久性可以打开或关闭,中间没有任何东西。

可以使用 Firestore.firestore() 对象的两个单独实例,如 accessing multple projects in your application 上的文档所示。 .对于同一个项目,您将有两个 FirebaseOptions/FirebaseApp/Firestore 实例,并在一个而不是另一个上启用缓存。但是您可能会遇到一个非常棘手的情况,以保持来自不同实例的文档同步。


关于异常本身:

异常很明显:您正试图在客户端已经初始化后修改设置。

在首次调用 firestore() 之前,您需要设置 firebase.firestore.settings。例如,这样就可以了:

let settings = FirestoreSettings()
settings.isPersistenceEnabled = false
Firestore.firestore.settings = settings
let COLLECTION_POSTS = Firestore.firestore().collection("posts")
let COLLECTION_USERS = Firestore.firestore().collection("users")

关于swift - 有没有办法只为一个集合启用离线持久性,而不是其他集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68900945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com