2016-03-28 1 views
0

В моем приложении я использую карты Apple с помощью Autocomplete API Google Адресов, чтобы иметь полную рабочую систему, и я использовал API Google Maps Web API, чтобы иметь возможность получить информацию о некоторых местах из Google, отправив широту и долготу, которые были преобразованы из местоположения на карте в реальную координату.Завершение приложения из-за неперехваченного исключения «NSRangeException» с API Карт Google

Я использовал следующую функцию, чтобы получить информацию:

func getAddressForLatLng(latitude: String, longitude: String) -> Array <String> { 

    var location_info = [String]() // Array to Contain the returned info from Google 

    let url = NSURL(string: "\(base_url)latlng=\(latitude),\(longitude)&key=\(api_key)") // url + latitude + longitude + api key 
    let data = NSData(contentsOfURL: url!) // get the content of the url 
    let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary // get the JSON from the url 

    if let result = json["results"] as? NSArray { 

     if let address = result[0]["address_components"] as? NSArray { 

      for value in 0...5 { 

       if let place = address[value]["short_name"]{ 

        location_info.append(place as! String) 
       } 
      } 
     } 
    } 
    return location_info 
} 

, но когда я протестировать приложение на моем iPhone я получаю следующее за пределами ошибки диапазона:

***, истекающее приложение из-за неперехваченного исключения «NSRangeException», причина: '- [__ NSCFArray objectAtIndex:]: index (4) за пределами (4)'

и я проверил каждое возможное решение для массива, но я никуда не денусь.

ответ

1

Пожалуйста, напишите for-in цикл как этот for value in 0...address.count-1

Я повторно написать свой код так:

func getAddressForLatLng(latitude: String, longitude: String) -> Array <String> { 

    var location_info = [String]() // Array to Contain the returned info from Google 

    let url = NSURL(string: "\(base_url)latlng=\(latitude),\(longitude)&key=\(api_key)") // url + latitude + longitude + api key 
    let data = NSData(contentsOfURL: url!) // get the content of the url 
    let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary // get the JSON from the url 

    if let result = json["results"] as? NSArray { 

     if let address = result[0]["address_components"] as? NSArray { 

     for value in 0...address.count-1 { 

      if let place = address[value]["short_name"]{ 

      location_info.append(place as! String) 
      } 
     } 
     } 
    } 

    return location_info 
    } 
+0

Спасибо человека, что это прекрасно работает. Не могли бы вы объяснить, в чем проблема с моей предыдущей версией. – SALEH

Смежные вопросы