Firebase App在启动时迅速崩溃

时间:2017-10-28 22:11:30

标签: ios swift firebase firebase-authentication

我有一个连接到我的firebase的ios应用程序,其中我有一个类,我已经定义了firebase-database的所有链接。

AppDelegate.swift包含一个public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<>(); for (int a = 0; a < 5; a++) list.add(a); removeRange_NEVER_DO_THIS(list, 2, 4); System.out.println(list); // [0, 1, 4] } public static void removeRange_NEVER_DO_THIS(LinkedList<?> list, int from, int to) { try { Method node = LinkedList.class.getDeclaredMethod("node", int.class); node.setAccessible(true); Object low = node.invoke(list, from - 1); Object hi = node.invoke(list, to); Class<?> clazz = low.getClass(); Field nextNode = clazz.getDeclaredField("next"); Field prevNode = clazz.getDeclaredField("prev"); nextNode.setAccessible(true); prevNode.setAccessible(true); nextNode.set(low, hi); prevNode.set(hi, low); Field size = LinkedList.class.getDeclaredField("size"); size.setAccessible(true); size.set(list, list.size() - to + from); } catch (Exception e) { throw new RuntimeException(e); } } 方法,因此Firebase是第一个被初始化的方法。

init()

Firebase Dataservice,其中定义了所有数据库路径。

override init() {
    super.init()
    FirebaseApp.configure()

}

现在,一旦我启动应用程序,我就会收到错误

import Firebase
import FirebaseDatabase

let DB_URL: DatabaseReference = Database.database().reference()
let ST_URL: StorageReference = Storage.storage().reference()
let uid = Auth.auth().currentUser?.uid

class FBDataservice {
//... other code
}

此错误是在dataservice类中的uid定义上进行的。

现在,据我所知,这是因为即使没有用户也可以初始化uid。

我没有关于如何实现这一点的想法。我在整个项目中都有很多对uid的引用。什么是最合适的方式。

由于

2 个答案:

答案 0 :(得分:3)

您可能想要使用observeAuthEventWithBlock

  

要侦听身份验证状态的更改,请附加事件   观察者使用observeAuthEventWithBlock。如果当前没有用户   经过身份验证,authData将为零。

根据reference

,您可以像这样实现它
let ref = Firebase(url: "https://<YOUR-FIREBASE-APP>.firebaseio.com")
ref.observeAuthEventWithBlock({ authData in
    if authData != nil {
        // user authenticated
        println(authData)
    } else {
        // No user is signed in
    }
})

答案 1 :(得分:0)

我不太确定您在初始化代码的位置。 可能的解决方案:

  1. 使用保护声明guard let userID = Auth.auth().currentUser?.uid else {return}

  2. 尝试将此代码放入将返回可选字符串的函数中。

  3. 如果您在didFinishLaunchingWithOptions之前尝试检查用户是否存在,请创建一个if else语句或guard语句,如上所示。 if Auth.auth().currentUser?.uid != nil
  4. 如果您使用的是Cocoapods,请尝试使用pod update
  5. 如果这些不起作用,请尝试重新安装pod。
  6. 在appDelegate的didFinishLaunchingWithOptions中调用FirebaseApp.configure()并返回true。