2016-05-19 1 views
9

Ich habe ungefähr 50 dieser Warnung in meinem Projekt. Seit der Aktualisierung sind alle meine Funktionen, bei denen ich snapshot.value["something"] as! String anrufe, fehlgeschlagen. Sie alle haben früher gearbeitet. Ich verwende nicht einmal die RemoteConfig-Funktion. Ich möchte nur Daten abrufen.Aus "FIRRemoteConfigValue!" zu nicht verwandtem Typ 'String' schlägt immer fehl

Beispiel aus meiner Benutzerklasse:

init(snapshot: FIRDataSnapshot) { 
     firstName = snapshot.value!["firstName"] as! String 
     lastName = snapshot.value!["lastName"] as! String 
} 

Beispiel aus einer Funktion (kann ich weitere Beispiele nennen, aber seine im Grunde mehr von der gleichen):

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 
      } 
     }) 
    } 

Die App läuft Da es sich nur um Warnungen handelt, sind die Warnungen korrekt, da die App fehlschlägt, sobald sie versucht, Daten abzurufen.

+0

ich in das gleiche Problem renne aber ich versuche tatsächlich auch das Remote Config zu verwenden. Hast du das jemals funktioniert? –

Antwort

4

Offenbar verursacht der Firebase/RemoteConfig-Pod diesen Fehler. Sobald ich den Pod deinstalliert habe, ging die Warnung weg. Definiere das definitiv als Bug.

+0

Haben Sie Ihr Problem schon behoben? –

+0

Was ist, wenn Sie RemoteConfig verwenden müssen? – vikzilla

0

Das hat mir geholfen:

if let value = snapshot.value as? [String : AnyObject] { 
+0

Können Sie mehr dazu sagen? –

+0

Ich habe das gerade hier gefunden: https://firebase.google.com/docs/database/ios/retrieve-data Manchmal sind ihre Dokumente irreführend. –

1

Das ist natürlich ein Fehler, aber für den Augenblick Ich glaube, ich um eine Arbeit zu finden.

Dies war, wie ich Informationen vor zum Importieren der Remote Konfig 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 
     } 
} 

Und das funktionierte gut

Alter Code gezogen.

Nach dem Hinzufügen von pod 'Firebase/RemoteConfig' zu meinem Podfile und Ausführen von pod install, trat die Warnung auf, die Sie oben beschrieben haben.

So habe ich das Problem behoben.

Neuer Code

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 
       } 
      } 
    } 
} 

explicity den Wert in einen String Gießen schien den Trick, zumindest für mich zu tun.

Dies ist eine Datenbank, die wie folgt aussieht:

- Data 
    - ObjectOne 
      - someKey: 'someStringValue' 
    - ObjectTwo 
      - someKey: 'anotherStringValue' 
0

das für mich wie Charme arbeitet, von der schnellen Datei/Klasse, in der Sie nur Firebase Echtzeit-Datenbank verwenden, entfernen

import Firebase

und fügen

import FirebaseAuth

import FirebaseDatabase

stellen Sie sicher, nicht Feuerbasis Datenbank und Feuer Basis Fernconfig an derselben Klasse, diese scheinbar einen Fehler von Google

1

Der Wert Eigenschaft ist eine ID (ANYOBJECT), und Sie müssen möglicherweise importieren werfen es zu Wörterbuch selbst.

let val = snapshot.value as! NSDictionary? 
firstName = val!["firstName"] as! String 
1

Yup !!! bekam schließlich eine Lösung ...

Verwenden valueForKey Statt [] Klammer Zugriffswert

Dann werden alle Wert weg ... geben

Für Beispiel

Warning code... 

Im Folgenden Code geht eine Warnung ...

  let someArray = resource["someArrayKey"] as? NSArray 
      let someBool = resource["someBoolKey"] as? Bool 

Verwenden Gefallen Sie diese

let someArray = resource.valueForKey("someArrayKey") as? NSArray 
       let someBool = resource.valueForKey("someBoolKey") as? Bool 

Warnung wird nicht mehr angezeigt .....

+0

Das hat mein Problem gelöst. –