So habe ich einige Probleme mit dem Auspacken und Optionals. Ich verwende Google Places und übergebe den Wert "place.formattedAddress" zweimal ... zuerst von GMSAutocompleteViewController an eine UIView, die in einer Zeichenfolge angezeigt werden soll. Dann möchte ich die Place.formedAddress an Firebase übergeben, nachdem der Benutzer den Ort bestätigt. Ich bin in der Lage, das ausgewählte GMSPlace in die UIView zu übergeben, aber wenn ich die confirmAddPlace() - Funktion aufruft, stürzt es bei Zeile ab> let placeID2 = place.placeID und gibt mir die "ending mit nicht abgefangener Ausnahme vom Typ NSException". Ich glaube, es hat etwas mit Auspacken und Optionals zu tun ... Ich bin noch etwas neu in diesem Konzept. Danke für jede Hilfe!Auspacken Werte schnell
// Pass GMSPlace to UIView string
// MARK: GOOGLE AUTO COMPLETE DELEGATE
func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
let placeID = place.placeID
placesClient.lookUpPlaceID(placeID, callback: { (place, error) -> Void in
if let error = error {
print("lookup place id query error: \(error.localizedDescription)")
return
}
guard let place = place else {
print("No place details for \(placeID)")
return
}
print("Place name \(place.name)")
print("Place address \(place.formattedAddress)")
})
let selectedPlace = place.formattedAddress
if let name = selectedPlace as String!
{
self.placeNameLabel.text = "Are you sure you would like to add \(name) to your places?"
}
self.dismiss(animated: true, completion: nil)
setupConfirmationPopUp()
}
// user taps confirm button to send item to be updated in Firebase
func confirmAddPlace(place: GMSPlace!) {
let accessToken = FBSDKAccessToken.current()
guard let accessTokenString = accessToken?.tokenString else { return }
let credentials = FIRFacebookAuthProvider.credential(withAccessToken: accessTokenString)
FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in
if error != nil {
print("Something went wrong with our FB user: ", error ?? "")
return
}
// create place on tap pf confirm
let placeID2 = place.placeID
guard let place = place else {
print("No place details for \(placeID2)")
return
}
let confirmedPlace = place.formattedAddress
if let confirmedPlace = confirmedPlace as String!
{
self.placeNameLabel.text = "\(confirmedPlace)"
}
let ref = FIRDatabase.database().reference().child("places")
let childRef = ref.childByAutoId()
let values = ["place": self.placeNameLabel.text, "name": user!.displayName]
childRef.updateChildValues(values)
})
animateOut()
}
Danke, aber ich habe sowohl GMSPlace und Ort Option wie in Ihrem ersten Vorschlag erwähnt und es stürzt immer noch. Ich habe auch die zweite Option mit dem Auspacken ConfirmAddPlace (selectedPlace!) Und immer noch kein Glück versucht ... – user3708224
@ user3708224 können Sie versuchen, die dritte ?? – nayem
yep - stürzt immer noch bei meinem AppDelegate ab und gibt mir das Beenden mit einer nicht abgefangenen Ausnahme vom Typ NSException error .... Ich frage mich, ob es einen einfacheren Weg gibt, den Namenswert aus dem self.placeNameLabel.text = "Bist du sicher du möchtest \ (name) zu deinen Orten hinzufügen? " String gespeichert in der Funktion viewController() ... ?? – user3708224