所以......嗨......我一直在拉我的头发,希望有人能帮助我。
最好的办法是我把代码给你看,这样你就知道我在做什么,还有这个图片,让你更容易理解。图片在这里
基本上,我是在这些UITextFields上写文章,检查它们是否有文本,就像这样。
func fieldsAreCompleted() -> Bool {
return (titleTextField.text != "" && priceTextField.text != "" && wasPricedTextField.text != "")
}
然后把布尔值传给my rightBarButtonItems
标题为 "完成"(如上图所示)。
现在,只要我按下 "完成 "按钮,我就会保存 "完成 "的信息。UUID()uuidString
正如你在这里看到的。(1 of 2)
private func saveItemToFirebase(completion: (() -> Void) -> Void) {
let item = ItemModel()
item.id = UUID().uuidString
item.name = titleTextField.text!
item.description = descriptionInput.text
item.price = Double(price.text!)
item.wasPrice = Double(wasPriced.text!)
// This function is the one that actually does the work of saving "item" to firebase
pushItemToFirestore(item)
}
这里是我的Done BarButton动作。(2 of 2)
@objc func done() {
if fieldsAreCompleted() && switchObj.isOn {
saveItemToFirebase { (_) in
let alertController = UIAlertController(title: "Some title here", message: "Some message here", preferredStyle: .alert)
let okAction = UIAlertAction(title: "Ok", style: .default) { [weak self] (_) in
guard let strongSelf = self else { return }
//trigger this function when pressing ok
strongSelf.saveHomeToFireBase()
strongSelf.navigationController?.popViewController(animated: true)
}
let cancelAction = UIAlertAction(title: "No", style: .cancel) { (_) in
self.navigationController?.popViewController(animated: true)
}
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
} else {
print("Error all fields are required")
}
}
项目被保存到firebase,没有任何问题......但是在我的项目被保存后,完成处理程序不会触发。UIAlertController
但它不会提示我......代码只是在没有提示的情况下进行......为什么我的关闭被跳过了?
最后,在闭包中我有一个函数,当我按下UIAlert上的 "Ok "时就会被触发。
var item: Item!
private func saveHomeToFireBase() {
let home = HomeModel()
home.itemId = item.id
saveHomeToFirestore(home)
}
这里的最终目的是在Firebase中创建第二个文件夹(或一个新的集合),里面有项目的内容。UUID().uuidString
作为它的属性......因此我需要一个完成的汉德:运行一个新的汉德。saveHomeToFirestore(home)
只有在上传的项目和其对应的 UUID()
我的结论是,我的完成处理程序不正确。我想)。
谢谢你!所以...
你没有在'saveItemToFirebase'中调用完成块,也没有将firebase调用设置为完成,所以代码会在调用API后停止。
我建议你把 "pushItemToFirestore "设置成和 "saveItemToFirebase "完全一样,除了 "item "参数,然后像这样调用 "pushItemToFirestore"。
pushItemToFirebase { (_) in
// completion statement here
}
你基本上要做两个完成语句。