2017-09-27 67 views
0

试图从firebase上载地址并将其发布到mapView。但由于某些原因地址不想卸载。地址拼写出来的字符串在firebase示例中 - 莫斯科,街道某某,房屋1。什么可能是不加载数据的原因?从地图查看Firebase下载地址

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

火力地堡:

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

凡在JSON呢'addressRef'点? –

+0

addressRef = Database.database()。reference(withPath:“Address”) –

回答

0

您将值观察者附加到/Address,这意味着您将获得该位置所有数据的快照。由于有多个子地址,您的代码需要处理这些地址。

做到这一点的最简单的方法是通过监听.childAdded而不是.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 ?? "" 
}) 

现在你的代码被用的每一单个地址触发。

您也可以坚持在快照观察.value,然后遍历结果:

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

使用另购的解包,并设置一些线路断点,看看你想要什么你的代码没有:

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

你也应该使用SWIFT迅速的类型,这是一个很好的做法。

+0

嗯,它帮了我一些忙,我得到了一个“无价值地址”的打印。 而且我从问题的firebase中添加了JSON文件。 –

+0

设置完成块中的断点,看看什么是快照的 –

+0

allAddresses \t字符串\t值“” \t \t 也许我没有正确地从火力提取数据... –