我正在尝试将我的应用升级到新版本的Firebase.我浏览了设置指南并编辑了所有代码以匹配新语法.但是,当我运行应用程序时,我得到了这两个错误.
The default app has not been configured yet.
Terminating app due to uncaught exception 'MissingDatabaseURL', reason: 'Failed to get FIRDatabase instance: FIRApp object has no databaseURL in its FirebaseOptions object.'
Run Code Online (Sandbox Code Playgroud)
我已经 FIRApp.configure()在AppDelegate中将GoogleServices-Info.plist导入到我的项目中.plist也有所有正确的信息.其他任何人遇到这个或知道如何解决它?
我的项目中有大约50个同样的警告.自更新以来,我调用的所有函数snapshot.value["something"] as! String都失败了.他们以前都曾经工作过.我甚至没有使用RemoteConfig功能.我只是想检索数据.
我的User类示例:
init(snapshot: FIRDataSnapshot) {
firstName = snapshot.value!["firstName"] as! String
lastName = snapshot.value!["lastName"] as! String
}
Run Code Online (Sandbox Code Playgroud)
函数示例(我可以提供更多示例,但基本上更相同):
func loadProfileImage(ref:FIRDatabaseReference) {
ref.observeEventType(.Value, withBlock: {snapshot in
let base64String = snapshot.value!["profileImgURL"] as! String
let decodedData = NSData(base64EncodedString: base64String, options:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
if let decodedImage = UIImage(data: decodedData!) {
self.profileImgImageView.contentMode = .ScaleAspectFill
self.profileImgImageView.layer.cornerRadius = self.profileImgImageView.frame.size.width / 2
self.profileImgImageView.clipsToBounds = true
self.profileImgImageView.image = decodedImage as UIImage
}
})
}
Run Code Online (Sandbox Code Playgroud)
应用程序运行是因为它们只是警告但警告是正确的,因为应用程序在尝试检索任何数据时就会失败.
我有Firebase为Swift应用程序中的记录生成随机密钥.如果我想更改特定记录,如何检索该密钥?在下面的示例中,我标记了一个任务完成,但是当我点击按钮时它没有按预期工作,因为我没有引用特定任务但是引用任务我需要随机生成的密钥.
func doneHit(cell:TaskCell) {
if let ip = tableView.indexPathForCell(cell) {
var task = tasksInSectionArray[ip.section][ip.row]
let tasksRef = ref.childByAppendingPath("tasks")
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
let doneRef = tasksRef.childByAppendingPath("\(snapshot.key)/done")
if task.done == false {
task.done = true
cell.checkBox.image = UIImage(named: "checkedbox")
doneRef.setValue(task.done)
}
else {
task.done = false
cell.checkBox.image = UIImage(named: "uncheckedbox")
doneRef.setValue(task.done)
}
let completedByRef = tasksRef.childByAppendingPath("\(snapshot.key)/completedBy")
if task.done == true {
completedByRef.setValue(self.user)
cell.detailLabel.text = "Completed By: \(self.user)"
}
else {
completedByRef.setValue("")
cell.detailLabel.text = ""
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
我的Firebase结构:
我一遍又一遍地阅读了Firebase文档,只需要澄清一下.这与我的具体代码无关,就像我对Firebase的理解一般.
我知道.Value每次调用时都会检索所有数据,并继续监视数据库中的更改.并.ChildAdded查找引用子项的变化.是否.ChildAdded还检索所有值的最初?我应该实现这两个.Value和.ChildAdded的相同的路径?如果没有,当我尝试做的时候.ChildAdded,没有任何东西出现,但是当我跑步时,我的.Value所有物品都显示出他们应该的样子.我不想要的是每次更改或添加单个值时都要从数据库中重新获取每个值,因为当我有数千个要获取的项目时,这似乎会导致一些带宽问题.最好的工作流程是getAllItems()用ObserveSingleEventOfType 创建一个.Value函数(),这样它只调用一次,然后有一个重复的函数(getNewItems())除了.ChildAdded和observeEventOfType?
Xcode会向我抱怨有关将图像上传到Firebase存储的权限的任何原因,但是当我在模拟器中运行相同的应用程序时,它可以正常工作吗?
权限错误:
车身文件无法访问:/var/mobile/Media/DCIM/100APPLE/IMG_0974.JPG错误域= NSCocoaErrorDomain代码= 257"文件'IMG_0974.JPG’无法打开,因为您没有权限查看. " 的UserInfo = {NSURL =文件:///var/mobile/Media/DCIM/100APPLE/IMG_0974.JPG,NSFilePath =在/ var /移动/媒体/ DCIM/100APPLE/IMG_0974.JPG,NSUnderlyingError = {0x14805d680误差区域= NSPOSIXErrorDomain代码= 1"不允许操作"}}
我有两节课.在其中一个中,返回键(用于虚拟键盘)完美地工作.在另一方面,它没有.据我所知,代码几乎完全相同.有人可以帮我弄清楚为什么我不解雇那个不起作用的那个?
这个工作:
class ChangePasswordVC: UIViewController, UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.tempPasswordTextField {
self.changeTempPasswordTextField.becomeFirstResponder()
}
else if textField == self.changeTempPasswordTextField {
self.confirmChangeTempPasswordTextField.becomeFirstResponder()
}
else {
changePasssword()
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
这个不起作用:
class ResetPasswordVC: UIViewController, UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.emailTextField {
print("go button tapped")
submitEmailForPasswordReset()
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
我将print语句放入其中以查看它是否会触发,但它不会向控制台打印任何内容.