我想尝试使用一些在线教程来制作连接到Firebase的应用,但是它们已经过时,因为它们仍在使用FIRApp.configure()
等。因此我必须相应地更改代码而无法完成这种应用程序的可行版本。
到现在为止,我已经:
如何定义" ref" AppDelegate中的变量(How to fix Firebase SIGABRT crash iOS),
如何将AppDelegate中的变量设置为全局变量,并在其他ViewControllers(How do I get a reference to the app delegate in Swift?)中可读,
检查我是否包含了正确的pod文件,并在viewDidLoad部分(Where do I add the database reference from Firebase on iOS?)内设置变量的值,
注意到可能需要更新pod文件,执行pod崩解和pod更新(Get a database reference in the new Firebase 4.0 release)。
对于podfile,我已经包含:
pod 'Firebase/Core'
pod 'Firebase/Database'
对于AppDelegate,(部分未显示为默认值)
import UIKit
import CoreData
import Firebase
import FirebaseDatabase //tried not having this line, still the same
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var ref: DatabaseReference!
func application(_application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
self.ref = Database.database().reference()
return true
}
对于ViewController,(未显示的部分是默认的或者当然不相关)
import UIKit
import Firebase
import FirebaseDatabase //again, tried with/without this line
class ViewController: UIViewController {
@IBOutlet weak var emailfield: UITextField!
@IBOutlet weak var usrnamefield: UITextField!
@IBOutlet weak var pwdfield: UITextField!
@IBOutlet weak var loginbtn: UIButton!
@IBOutlet weak var createnewaccbtn: UIButton!
@IBOutlet weak var forgetpwdbtn: UIButton!
//......
@IBAction func createnewAcc(_ sender: UIButton) {
let username = usrnamefield.text
let email = emailfield.text
let password = pwdfield.text
if username != "" && email != "" && password != "" {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.ref.child("users").setValue(["username": username]) //this line is highlighted with the error below
//Cannot even update one single field to the database
}
}
}
但是当我运行模拟器时,错误显示
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
参考:
Xcode 9.2,CocoaPods 1.4.0,部署目标:9.2,10.3
更新(2018年2月27日,GMT 18:00):
尝试直接在databaseReference
中定义ViewController
变量,并使用databaseReference = Database.database().reference()
内的viewDidLoad
分配值。
结果是在AppDelegate(signal SIGABRT
行)中收到class AppDelegate
。禁用上述值分配代码可解决signal SIGABRT
问题,但仍无法连接到Firebase数据库......
答案 0 :(得分:0)
你在代码中显示的是写入firebase而不是检索。现在重点是,如果你想写,那么首先使用一些常量值,如果工作意味着firebase连接正确,否则文本字段或创建数据库引用问题。有没有理由,不在同一个ViewController中提供你想要在firebase中读写的内容?