2014-08-27 6 views
2

я получаю результаты MKLocalSearch и включает в себя что-то вроде ...MKMapItem не показывает правильную информацию о MKPlacemark

{ 
    address =  { 
     formattedAddressLine =   (
      "Marton Road", 
      Middlesbrough, 
      TS1, 
      England 
     ); 
     structuredAddress =   { 
      administrativeArea = England; 
      areaOfInterest =    (
       "Great Britain" 
      ); 
      country = "United Kingdom"; 
      countryCode = GB; 
      fullThoroughfare = "Marton Road"; 
      geoId =    (
      ); 
      locality = Middlesbrough; 
      postCode = TS1; 
      subAdministrativeArea = Middlesbrough; 
      thoroughfare = "Marton Road"; 
     }; 
    }; 
    addressGeocodeAccuracy = 0; 
    business =  (
       { 
      UID = 9301704419119613323; 
      URL = "http://www.cineworld.co.uk"; 
      attribution =    (
           { 
        attributionURLs =      (
         "yelp5.3:///biz/cineworld-middlesbrough", 
         "yelp4:///biz/cineworld-middlesbrough", 
         "yelp:///biz/cineworld-middlesbrough", 
         "http://yelp.com/biz/cineworld-middlesbrough" 
        ); 
        sourceIdentifier = "com.yelp"; 
        sourceVersion = 1; 
       } 
      ); 
      canBeCorrectedByBusinessOwner = 1; 
      name = Cineworld; 
      source =    (
           { 
        "source_id" = "b2LOPag6ha6845__dgXehw"; 
        "source_name" = yelp; 
       }, 
           { 
        "source_id" = 6670; 
        "source_name" = tribune; 
       }, 
           { 
        "source_id" = 2000000103009680; 
        "source_name" = "acxiom_intl"; 
       }, 
           { 
        "source_id" = "cineworld-middlesbrough"; 
        "source_name" = "yelp_alias"; 
       } 
      ); 
      "star_rating" =    (
       0 
      ); 
      telephone = "+448712002000"; 
     } 
    ); 
    center =  { 
     lat = "54.57633773904653"; 
     lng = "-1.228197113614671"; 
    }; 
    inputLanguage = en; 
    localSearchProviderID = 9902; 
    mapRegion =  { 
     eastLng = "-1.224891596539819"; 
     northLat = "54.57545000290778"; 
     southLat = "54.5738619816233"; 
     westLng = "-1.227631256834202"; 
    }; 
    name = Cineworld; 
    type = 57; 
} 

Теперь, когда я добавить его к моей карте с ...

id <MKAnnotation> annotation = mapItem.placemark; 

[self.mapView addAnnotation:annotation]; 

Он добавляет булавку, которая, когда я нажимаю на нее, показывает «Мартон-роуд», но мне хотелось бы показать «Cineworld».

Мне очень сложно найти информацию о получении материала из MKMapItem и в MKPlacemark.

Если я попытаюсь использовать mapItem.name в метке места, тогда все они показывают «Соединенные Штаты».

Любая идея, как я могу получить более полезную информацию из этого?

+0

Это, скорее всего, вопрос повторного использования аннотаций. Можете ли вы показать код, который вы используете в - (MKAnnotationView *) mapView: (MKMapView *) map viewForAnnotation: (id ) аннотация {}? – Mike

+0

Я не использую это. Буквально две строки выше - все, что я использую, чтобы поместить штифты на карту. – Fogmeister

+0

Я бы посмотрел на это больше, например, на UITableViewCells, аннотации повторного использования карты, и любая информация о дублировании/неправильной информации обычно вызвана проблемами повторного использования. – Mike

ответ

2

MKPlacemark возвращает адрес своей собственности title и MKPlacemark класс не позволяет установить title себя.

Что вы можете сделать, это создать MKPointAnnotation (который имеет настраиваемую title свойство) и установите его title все, что вы хотите, как mapItem.name.

Например:

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init]; 
pa.title = mapItem.name; 
pa.coordinate = mapItem.placemark.coordinate; 
[self.mapView addAnnotation:pa]; 


Примечание:
Вы не должны использовать MKPointAnnotation класс (это просто самый удобный доступен).
Вы также можете использовать пользовательский класс, который соответствует MKAnnotation и имеет свойство title (или некоторый класс, который возвращает MKMapItemname как title).

Также обратите внимание, что если вы хотите, чтобы иметь возможность получить доступ к связанным MKMapItem или MKPlacemark в аннотации добавляемой после-фактум (например. В методах вида карты делегата), вам необходимо использовать специальный класс вместо MKPointAnnotation, где вы добавляете свойство sourceMapItem или sourcePlacemark, которое вы можете установить при создании аннотации.

Таким образом, вы можете установить title по мере необходимости, но все-таки получить доступ ко всему оригинальным MKMapItem или MKPlacemark значения, из которого был создан объект аннотации (вы не могли сделать это легко, если вы используете только MKPointAnnotation, так как он не держит ссылка на элемент исходной карты или метку).

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