我最近在自己的一个iOS应用中切换到了Firestore。我正在尝试将一些设置存储在“设置”集合中。
我有以下代码:
Future<String> aloadAsset(BuildContext context) async {
return await DefaultAssetBundle.of(context).loadString('assets/my_text.txt');
}
根据Firestore文档,这将创建文档(以及集合)。但是没有创建文档。我已经在print()行上设置了一个断点,但这也从未被调用。
这是我在Firestore中的规则:
let data = FSSettings().store() // returns [String : Any]
let db = Firestore.firestore()
let document = db.collection("settings").document(uid) // I tried this
document.setData(data)
{
error in
Swift.print(error?.localizedDescription)
}
// And this..
db.collection("settings").addDocument(data: data)
{
error in
Swift.print(error?.localizedDescription)
}
这也应该起作用,因为我已经登录。我还尝试了使用事务的另一种方法:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
运行此语句时,将打印以下行:
let db = Firestore.firestore()
let document = db.collection("settings").document(uid)
db.runTransaction(
{
transaction, errorPointer in
transaction.updateData(data, forDocument: document)
})
{
// Completion
object, error in
if let error = error
{
Swift.print(error.localizedDescription)
}
}
我想念什么?我的应用程序在iOS 12.0上运行,并使用最新的Firebase / Firestore版本(CocoaPods)。
当我手动创建文档时,我可以毫无问题地更改值,只是创建失败。
答案 0 :(得分:0)
Firestore初始化似乎需要一些时间。这些设置是在应用程序启动时创建的,因此Firestore尚未初始化。稍稍延迟2秒即可运行上面的代码。