【问题标题】:How to reach the value behind the childByAutoId()如何达到 childByAutoId() 背后的值
【发布时间】:2017-11-09 15:01:56
【问题描述】:

当我保存用户创建的项目时,我使用以下代码:

let ref = Database.database().reference(fromURL: "https://projectsupport-e475b.firebaseio.com/").child("Projects").childByAutoId() 
let values = ["ProjectTitle": ProjectTitle, "Fighters": EarlySupporters, "Tags": Tags, "TotalFighters": "0", "Description": Description, "ProfileImage": profileImageUrl, "Creator": self.username!] as [String : Any]


ref.updateChildValues(values)

这是我的数据库:

Projects:
        |
        -------KyHzk8VtHitcLlYw1MT
              | 
              - ProjectName: "ProjectNameTest"
              |
              - Creator: "CreatorTest"
              - And so on...

当我尝试检索数据时,我使用以下代码:

Database.database().reference().child("Projects").observe(.childAdded, with: { (snapshot) in

            if let dictionary = snapshot.value as? [String : AnyObject]
            {
                let project = Project(dictionary: dictionary)
                //The following line was the problem:

                //project.setValuesForKeys(dictionary)


                //I'm still not sure why that solved the problem.

                print(project)
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }

            print(snapshot)
        }, withCancel: nil)

这会导致如下崩溃:

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合键创建者的键值编码。”

如何访问数据?如何获得钥匙?

【问题讨论】:

  • 首先在您的 firebase 数据库中,您是否检查了您的值是否按照您的需要正确更新?然后,您可以打印您的字典以查看它是否正确检索您的快照值?
  • 就像人们提到的那样,我认为您的问题在于您的数据而不是 firebase
  • 我不确定。

标签: swift firebase firebase-realtime-database key


【解决方案1】:

我明白了!我认为这些代码行存在一些问题:

let project = Project(dictionary: dictionary) project.setValuesForKeys(dictionary)

你的变量项目的类型是什么?前面有let关键字,你是说你的project变量是一个不可变类型。 设置后无法修改。而且,这正是您在函数setValueForKeys 的下一行尝试执行的操作。尝试将projectvar project = Project(dictionary: dictionary) 设置为可变类型,看看是否有任何区别。

【讨论】:

  • 对不起,Xcode 说变量没有改变并且显示警告,我也用 let statmente 保存和获取用户。
猜你喜欢
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多