如何从MKLocalSearchCompletion中提取国家和城市?

6

我从MKLocalSearchCompleter接收到MKLocalSearchCompletion项目并将其传递给代理。每个MKLocalSearchCompletion包含一个标题和一个副标题,副标题是一个地址。我需要从地址中提取城市和国家。请帮忙!

2个回答

10

请使用以下代码:

MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = @"1 Infinite Loop Cupertino, CA 95014"; 
request.region = _mapView.region;
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
    //NSLog(@"Map Items: %@", response.mapItems);
    if (response.mapItems.count>0) {
        for (MKMapItem *item in response.mapItems) {
            //NSLog(@"Place: %@",[item valueForKey:@"place"]);
            NSDictionary *dictStructuredAddress = [[[item valueForKey:@"place"] valueForKey:@"address"] valueForKey:@"structuredAddress"];
            NSLog(@"Structured Address : %@",dictStructuredAddress); 
            NSLog(@"Country & City : %@ & %@",[dictStructuredAddress valueForKey@"country"],[dictStructuredAddress valueForKey@"locality"]);
        }
}];

在这个dictStructuredAddress中,您可以获取国家、城市等信息。

它没有这样的值! - Michał Ziobro
一些:1个元素
  • 0:<MKMapItem: 0x283d94420> { isCurrentLocation = 0; name = 智利; placemark = "智利,智利@ <-34.57297600,-71.09573240> +/- 0.00m,区域CLCircularRegion(标识符:'<-39.31833481,-87.92901825>半径2628724.37',中心:<-39.31833481,-87.92901825>,半径:2628724.37m)"; timeZone = "美国/圣地亚哥(GMT-3)偏移-10800(夏令时)"; }
- Michał Ziobro
这很棒,但我在转换成Swift时遇到了麻烦,特别是dictStructuredAddress和chained valueForKey。 - erickva
@erickva:只打印 item["place"],你就能得到实际的键。 - Poles
@Poles 我发现无法解析从 item["place"] 返回的键,很奇怪。 - erickva

4

MKLocalSearchCompletion并不包含“地址”。它包含标题和子标题。如果需要更多信息,请使用MKLocalSearchCompletion创建MKLocalSearchRequest并执行MKLocalSearch。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接