无法在Firestore中创建新文档

时间:2019-01-10 17:05:54

标签: swift firebase google-cloud-firestore

我最近在自己的一个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)。

当我手动创建文档时,我可以毫无问题地更改值,只是创建失败。

1 个答案:

答案 0 :(得分:0)

Firestore初始化似乎需要一些时间。这些设置是在应用程序启动时创建的,因此Firestore尚未初始化。稍稍延迟2秒即可运行上面的代码。