我有一个应用程序,我正在用户将创建一个事件。用户将在4个字段中输入事件的地址,“号码”,“街道”,“城镇/城市”和“邮政编码”。
地址将存储在数据库中,然后从数据库调用,用于使用google maps sdk在地图上放置标记。
我试图通过使用CLLocation验证地址并对地址进行地理编码以查看它是否返回命中,如果不是,则会返回错误,但即使输入实际地址,我仍然会收到错误。
我现在离开了我的电脑,所以如果以后需要可以发布代码,但是现在,有没有人有办法肯定会有效?有没有办法验证地址,以确保它是真实的?
编辑**
func forwardGeocoding(address: String) {
CLGeocoder().geocodeAddressString(address) { (placemarks, error) in
if error != nil {
self.alert(message: "Have you entered your address correctly?", title: "Invalid Address")
self.coordinates.latitude = 0.0
self.coordinates.longitude = 0.0
}
if (placemarks?.count)! > 0 {
let placemark = placemarks?[0]
let location = placemark?.location
let coordinate = location?.coordinate
self.coordinates = (location?.coordinate)!
}
}
}
@IBAction func didTapCreate(_ sender: Any) {
if ((houseNumber.text?.characters.count)! > 0 && (streetInput.text?.characters.count)! > 0 && (cityInput.text?.characters.count)! > 0 && (postcodeInput.text?.characters.count)! > 0)
{
let address = "\(houseNumber.text) \(streetInput.text), \(cityInput.text)"
self.forwardGeocoding(address: address)
if (coordinates.latitude == 0.0 && coordinates.longitude == 0.0)
{
self.alert(message: "Have you entered your address correctly?", title: "Invalid Address")
}
else
{
let key = self.dbRef.child("events").childByAutoId().key
let childUpdates = ["/events/\(self.loggedInUser!.uid)/\(key)/address":address, "/events/\(self.loggedInUser!.uid)/\(key)/date":dateInput.text] as [String : Any]
self.dbRef.updateChildValues(childUpdates)
dismiss(animated: true, completion: nil)
}
}
}
我已经更改了警报,以便在每个警报的末尾都有一个数字来调试它被捕获,并且它似乎被捕获到创建按钮警报,这意味着lat和long被设置为0.0即使没有错误