2017-09-27 7 views
0

Vous essayez de télécharger une adresse depuis Firebase et de l'afficher sur mapView. Mais pour une raison quelconque, l'adresse ne veut pas décharger. L'adresse épelée par la chaîne dans l'exemple firebase - Moscou, rue untel, maison 1. Quelle pourrait être la raison pour ne pas charger les données?Adresse de téléchargement de firebase dans mapView

var allAddresses: String = "" 

addressRef = Database.database().reference(withPath: "Address") 

addressRef.observe(.value, with: { (snapshot) in 

     let value = snapshot.value as! NSDictionary 

     self.allAddresses = value["address"] as? String ?? "" 
    }) 
} 

Firebase:

{ 
    «Address» : { 
    «AddressOne» : { 
     "address" : "Москва, Пресненская набережная д.8, квартира 195, подъезд 94", 
    }, 
    "AddressTwo» : { 
     "address" : "Москва, ул. Правды д.24 строение 3", 
    }, 
    "AddressThree» : { 
     "address" : "Москва,ул.Электрозаводская д.21", 
    } 
    } 
} 
+0

Où dans le JSON 'addressRef'-t pointez? –

+0

addressRef = Database.database(). Reference (withPath: "Adresse") –

Répondre

0

Vous associez un observateur de valeur à /Address, ce qui signifie que vous obtenez un instantané avec toutes les données à cet emplacement. Comme il existe plusieurs adresses enfants, votre code devra les gérer.

La façon la plus simple de le faire est à l'écoute de .childAdded au lieu de .value:

var allAddresses: String = "" 

addressRef = Database.database().reference(withPath: "Address") 

addressRef.observe(.childAdded, with: { (snapshot) in 

    let value = snapshot.value as! NSDictionary 

    self.allAddresses = value["address"] as? String ?? "" 
}) 

Maintenant, votre code est à chaque adresse déclenchée individuelle.

Vous pouvez également tenir à l'observation .value puis boucle sur les résultats dans l'instantané:

var allAddresses: String = "" 

addressRef = Database.database().reference(withPath: "Address") 

addressRef.observe(.value, with: { (snapshot) in 
    for address in snapshot.children.allObjects as [FIRDataSnapshot] { 
     let value = address.value as! NSDictionary 

     self.allAddresses = value["address"] as? String ?? "" 
    }) 
}) 
0

Utilisation facultative et dépliage points d'arrêt sur certaines lignes pour voir où votre code ne fait pas ce que vous voulez:

var allAddresses: String = "" 

addressRef.observe(.value, with: { (snapshot) in 

     if let value = snapshot.value as? [String:Any] { 
      if let address = value["address"] as? String { 
       self.allAddresses = address 
      } else { 
       print("no address in value") 
      } 
     } else { 
      print("no value from firebase") 
     } 
    }) 
} 

Vous devez également utiliser rapidement types dans Swift, c'est une bonne pratique.

+0

Hmm, ça m'a aidé un peu, j'ai eu une impression "pas d'adresse en valeur". Et j'ai ajouté le fichier JSON de Firebase en question. –

+0

mis un point d'arrêt à l'intérieur du bloc d'achèvement et de regarder ce qui est la valeur de l'instantané –

+0

allAddresses \t chaîne \t « » \t \t Peut-être que je ne suis pas extraire correctement les données de la firebase ... –