从 'FIRRemoteConfigValue!' 转换为无关类型 'String' 总是失败
Cast from 'FIRRemoteConfigValue!' to unrelated type 'String' always fails
我的项目中有大约 50 个相同的警告。自更新以来,我调用 snapshot.value["something"] as! String
的所有函数都失败了。他们都曾经工作过。我什至没有使用 RemoteConfig 功能。我只是想检索数据。
来自我的用户的示例 class:
init(snapshot: FIRDataSnapshot) {
firstName = snapshot.value!["firstName"] as! String
lastName = snapshot.value!["lastName"] as! String
}
一个函数的例子(我可以给出更多的例子,但基本上是一样的):
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
}
})
}
应用程序运行是因为它们只是警告,但警告是正确的,因为应用程序在尝试检索任何数据后立即失败。
显然 Firebase/RemoteConfig pod 会导致此错误。一旦我卸载了 pod,警告就消失了。绝对把它作为一个错误。
这对我有帮助:
if let value = snapshot.value as? [String : AnyObject] {
这显然是一个错误,但目前我想我找到了解决方法。
这就是我在导入 RemoteConfig pod
之前提取信息的方式
旧代码
let databaseRef = FIRDatabase.database().referenceWithPath("Data");
_ = databaseRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
for (item) in snapshot.children {
let someValue = item.value!["someKey"] as? String
}
}
而且效果很好。
将 pod 'Firebase/RemoteConfig'
添加到我的 Podfile 和 运行 pod install
后,出现了您上面描述的警告。
我就是这样解决问题的。
新代码
let databaseRef = FIRDatabase.database().referenceWithPath("Data");
_ = databaseRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
if let resources = snapshot.value as? [String : AnyObject] {
for (key, obj) in resources {
if let dataObject = obj as? [String : AnyObject] {
let someValue = dataObject["someKey"] as? String
// Other data types still work
let someArray = resource["someArrayKey"] as? NSArray
let someBool = resource["someBoolKey"] as? Bool
}
}
}
}
明确地将值转换为 String 似乎可以解决问题,至少对我而言。
这适用于如下所示的数据库:
- Data
- ObjectOne
- someKey: 'someStringValue'
- ObjectTwo
- someKey: 'anotherStringValue'
这对我来说很有魅力,从您仅使用 Firebase 实时数据库的 swift file/class 中删除
import Firebase
并添加
import FirebaseAuth
import FirebaseDatabase
确保不要同时导入 firebase 数据库和 fire base 远程配置 class,这显然是 Google
的错误
值 属性 是一个 id (AnyObject),您可能需要自己将其转换为字典。
let val = snapshot.value as! NSDictionary?
firstName = val!["firstName"] as! String
我遇到了同样的问题,下面的代码非常适合我。
使用valueForKey
代替[]
括号访问值
然后所有值都消失了...
例如
下面的代码发出警告...
let someArray = resource["someArrayKey"] as? NSArray
let someBool = resource["someBoolKey"] as? Bool
使用下面的代码
let someArray = resource.valueForKey("someArrayKey") as? NSArray
let someBool = resource.valueForKey("someBoolKey") as? Bool
我的项目中有大约 50 个相同的警告。自更新以来,我调用 snapshot.value["something"] as! String
的所有函数都失败了。他们都曾经工作过。我什至没有使用 RemoteConfig 功能。我只是想检索数据。
来自我的用户的示例 class:
init(snapshot: FIRDataSnapshot) {
firstName = snapshot.value!["firstName"] as! String
lastName = snapshot.value!["lastName"] as! String
}
一个函数的例子(我可以给出更多的例子,但基本上是一样的):
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
}
})
}
应用程序运行是因为它们只是警告,但警告是正确的,因为应用程序在尝试检索任何数据后立即失败。
显然 Firebase/RemoteConfig pod 会导致此错误。一旦我卸载了 pod,警告就消失了。绝对把它作为一个错误。
这对我有帮助:
if let value = snapshot.value as? [String : AnyObject] {
这显然是一个错误,但目前我想我找到了解决方法。
这就是我在导入 RemoteConfig pod
之前提取信息的方式旧代码
let databaseRef = FIRDatabase.database().referenceWithPath("Data");
_ = databaseRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
for (item) in snapshot.children {
let someValue = item.value!["someKey"] as? String
}
}
而且效果很好。
将 pod 'Firebase/RemoteConfig'
添加到我的 Podfile 和 运行 pod install
后,出现了您上面描述的警告。
我就是这样解决问题的。
新代码
let databaseRef = FIRDatabase.database().referenceWithPath("Data");
_ = databaseRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
if let resources = snapshot.value as? [String : AnyObject] {
for (key, obj) in resources {
if let dataObject = obj as? [String : AnyObject] {
let someValue = dataObject["someKey"] as? String
// Other data types still work
let someArray = resource["someArrayKey"] as? NSArray
let someBool = resource["someBoolKey"] as? Bool
}
}
}
}
明确地将值转换为 String 似乎可以解决问题,至少对我而言。
这适用于如下所示的数据库:
- Data
- ObjectOne
- someKey: 'someStringValue'
- ObjectTwo
- someKey: 'anotherStringValue'
这对我来说很有魅力,从您仅使用 Firebase 实时数据库的 swift file/class 中删除
import Firebase
并添加
import FirebaseAuth
import FirebaseDatabase
确保不要同时导入 firebase 数据库和 fire base 远程配置 class,这显然是 Google
的错误值 属性 是一个 id (AnyObject),您可能需要自己将其转换为字典。
let val = snapshot.value as! NSDictionary?
firstName = val!["firstName"] as! String
我遇到了同样的问题,下面的代码非常适合我。
使用valueForKey
代替[]
括号访问值
然后所有值都消失了...
例如
下面的代码发出警告...
let someArray = resource["someArrayKey"] as? NSArray
let someBool = resource["someBoolKey"] as? Bool
使用下面的代码
let someArray = resource.valueForKey("someArrayKey") as? NSArray
let someBool = resource.valueForKey("someBoolKey") as? Bool