2017-05-25 3 views
1

Mein Programm verwendet Karte und ich habe ein UITextField, wo der Benutzer einen Suchausdruck eingibt, die Karte wird dann Anmerkungen der Suchergebnisse auf der Karte anzeigen. Das Programm funktioniert gut im Simulator, aber wenn es auf meinem Handy getestet wird, löst es einen Fehler "Null beim Entpacken eines optionalen Wertes" aus, wenn ich zwei Arbeiten wie "Hundepark" eingebe. Aber das Programm wird den Fehler nicht auf mein Telefon werfen, wenn ich zum Beispiel einfach "Hund" eingebe. Ich habe den Delegierten in der ViewDidLoad eingerichtet und alle meine Ausgänge sind ordnungsgemäß verknüpft. Ich habe hier gesucht und versucht, das Problem ohne Erfolg zu beheben, also dachte ich, ich würde fragen und sehen, ob euch Leute auffallen, was ich vermisse.Swift UIText Feld wirft keinen Fehler, wenn mehrere Wörter eingegeben

Hier ist die Funktion für die UITextLabel Suche:

@IBAction func searchField(_ sender: UITextField) { 
    let allAnnotations = self.mapView.annotations 
    self.mapView.removeAnnotations(allAnnotations) 
    let request = MKLocalSearchRequest() 
    request.naturalLanguageQuery = textField.text! 
    request.region = mapView.region 

    let search = MKLocalSearch(request: request) 
    search.start(completionHandler: {(response, error) in 

     if error != nil{ 
      print("Error occured in search: \(error!.localizedDescription)") 
     }else if response!.mapItems.count == 0{ 
      self.textField.text = "No matches found" 
     }else{ 
      print("Matches found") 
      for item in response!.mapItems{ 
       let annotation = MKPointAnnotation() 
       annotation.coordinate = item.placemark.coordinate 
       annotation.title = item.name 
       annotation.subtitle = item.placemark.thoroughfare! + ", " + item.placemark.locality! + ", " + item.placemark.administrativeArea! 
       self.mapView.addAnnotation(annotation) 
      } 
     } 
    }) 
    sender.resignFirstResponder() 
} 
+1

Auf welcher Zeile tritt der Fehler auf? Sie sollten erwägen, Ihre Optionen mit 'guard let' oder' if let' auszupacken, anstatt mit '!' Zu erzwingen. Dies kann Ihnen helfen zu verstehen, wo auch die Dinge falsch laufen. –

+0

Versuchte das und es war immer noch der Fehler. Hat den Code im Debugger durchlaufen und den Fehler nach der Zeile "self.mapView.addAnnotation" geworfen. Was wirklich komisch ist, ist, dass wenn Sie ein Wort eingeben, es in Ordnung ist, aber zwei und es wirft einen Fehler auf. Ganz zu schweigen davon, dass es perfekt im Simulator funktioniert. – oblagon

+1

auf welcher Zeile erhalten Sie Fehler? –

Antwort

0

So, nachdem sie in diese mehr auf der Suche ich eine Antwort gefunden, die nicht dem naturalLanguageQuery String Hinzufügen erfordert. Das Problem war, dass die for-Schleife einen Nullwert zurückgab. Einen Wachposten hereinzulassen, um es zu erwidern, löste es.

@IBAction func searchField(_ sender: UITextField) { 
    let allAnnotations = self.mapView.annotations 
    self.mapView.removeAnnotations(allAnnotations) 
    let request = MKLocalSearchRequest() 
    request.naturalLanguageQuery = textField.text! 
    request.region = mapView.region 

    let search = MKLocalSearch(request: request) 
    search.start(completionHandler: {(response, error) in 

     if error != nil{ 
      print("Error occured in search: \(error!.localizedDescription)") 
     }else if response!.mapItems.count == 0{ 
      self.textField.text = "No matches found" 
     }else{ 
      print("Matches found") 
      guard let response = response?.mapItems else { return } 
      for item in response{ 
       let annotation = MKPointAnnotation() 
       annotation.coordinate = item.placemark.coordinate 
       annotation.title = item.name 
       annotation.subtitle = item.placemark.thoroughfare! + ", " + item.placemark.locality! + ", " + item.placemark.administrativeArea! 

       self.mapView.addAnnotation(annotation) 
      } 
     } 
    }) 
    sender.resignFirstResponder() 
} 
Verwandte Themen