ios - 将数据库中的值读入数组

标签 ios swift firebase firebase-realtime-database

我正在尝试从数据库中读取并将值放入一个字符串数组中。但是,当我尝试将值插入数组然后打印该数组时,应用程序崩溃了。

var pets: [String]?

override func viewDidLoad() {
    super.viewDidLoad()

    let userRef = FIRDatabase.database().reference().child("users").child((FIRAuth.auth()?.currentUser?.uid)!).child("pets")
    userRef.observeSingleEvent(of: .value, with: { snapshot in
        if let snap = snapshot.value as? Bool {
            print("no values")
        } else if let snap = snapshot.value as? NSDictionary {
            for value in snap {
                print(value.key as! String)    // Prints out data in the database
                self.pets?.append(value.key as! String)
            }
            print(self.pets!)

        }
    })

有谁知道为什么 print(value.key as!String) 打印出数据,但是当我打印出数组时,应用程序崩溃并显示 unexpectedly found nil while unwrapping an Optional值?

最佳答案

您永远不会初始化宠物。您将其声明为可选但从未为其分配值。为什么不将您的代码更改为以下内容:

var pets = [String]() // start with an empty array 

override func viewDidLoad() {
    super.viewDidLoad()

    let userRef = FIRDatabase.database().reference().child("users").child((FIRAuth.auth()?.currentUser?.uid)!).child("pets")
    userRef.observeSingleEvent(of: .value, with: { snapshot in
        if let snap = snapshot.value as? Bool {
            print("no values")
        } else if let snap = snapshot.value as? NSDictionary {
            for value in snap {
                print(value.key as! String)    // Prints out data in the database
                self.pets.append(value.key as! String)
            }
            print(self.pets)

        }
    })

关于ios - 将数据库中的值读入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41627583/

相关文章:

ios - 读取 plist 中的键并获取值

iphone - 如何避免已发布的 iPhone 应用程序上的旧 xib 缓存?

iphone - 如何使用 Objective C 处理多任务关闭应用程序?

ios - 在 SwiftUI 的 MapView 中检测长按

ios - 如何修复 : "fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)"

ios - 如何垂直自动布局 UIView 列表,一个在另一个之上?

swift - 协议(protocol)方法的不同返回类型

ios - UI 测试 - 未找到与后代匹配类型匹配的匹配项...记录生成的代码

javascript - 向多个设备发送推送 FCM (Web) 无法生成通知 key

android - Firebase JobDispatcher-Scheduled 作业在设备重启时丢失