2017-09-27 66 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 也許我沒有正確地從火力提取數據... –