Tengo alnetworkingedor de 50 de esta misma advertencia en mi proyecto. Desde la actualización, todas mis funciones donde llamo snapshot.value["something"] as! String
snapshot.value["something"] as! String
está fallando. Todos solían trabajar antes. Ni siquiera estoy usando la function RemoteConfig. Solo quiero recuperar datos.
Ejemplo de mi class de usuario:
init(snapshot: FIRDataSnapshot) { firstName = snapshot.value!["firstName"] as! String lastName = snapshot.value!["lastName"] as! String }
Ejemplo de una function (puedo dar más ejemplos pero es básicamente más de lo mismo):
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 } }) }
La aplicación se ejecuta porque son solo advertencias, pero las advertencias son correctas porque la aplicación falla tan pronto como intenta recuperar cualquier dato.
Entonces aparentemente tener el pod Firebase / RemoteConfig provoca este error. Tan pronto como desinstalé la cápsula, la advertencia desapareció. Definitivamente poniendo esto como un error.
Esto es obviamente un error, pero por el momento creo que encontré un trabajo.
Así fue como obtuve información antes de importar el pod RemoteConfig
Antiguo Código
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 } }
Y eso funcionó bien.
Después de agregar pod 'Firebase/RemoteConfig'
a mi Podfile e pod install
ejecución, se produjo la advertencia que describió anteriormente.
Así es como solucioné el problema.
Nuevo código
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 } } } }
La explicación de lanzar el valor a una cadena parecía hacer el truco, al less para mí.
Esto es para una database que se parece a esto:
- Data - ObjectOne - someKey: 'someStringValue' - ObjectTwo - someKey: 'anotherStringValue'
La propiedad de valor es un id (AnyObject) y es posible que necesites lanzarlo al dictionary tú mismo.
let val = snapshot.value as! NSDictionary? firstName = val!["firstName"] as! String
Sip !!! Finalmente conseguí una solución …
Use valueForKey
lugar de []
bracket access value
Entonces todo valor desaparece …
Por ejemplo
Warning code...
Debajo del código dar una advertencia …
let someArray = resource["someArrayKey"] as? NSArray let someBool = resource["someBoolKey"] as? Bool
Use Like this
let someArray = resource.valueForKey("someArrayKey") as? NSArray let someBool = resource.valueForKey("someBoolKey") as? Bool
La advertencia no es más larga …
Esto me ha ayudado:
if let value = snapshot.value as? [String : AnyObject] {
esto funciona como encanto para mí, del file / class rápido en el que está utilizando solo la database en time real de Firebase, elimine
import Firebase
y añada
import FirebaseAuth
import FirebaseDatabase
asegúrese de no importar la database de firebase y la configuration remota de base de bomberos en la misma class, esto aparentemente es un error de Google