【发布时间】:2015-05-26 14:47:22
【问题描述】:
我想让用户搜索街道名称并将结果显示在 UITableView 中。 目前地区并不重要,可以来自任何地区。
我在搜索中找不到任何相关示例,我不知道应该使用 CLLocation 还是 MKLocalSearch。
根据文档,我应该使用 MKLocalSearch:
虽然本地搜索和地理编码类似,但它们支持 不同的用例。当您想要在两者之间进行转换时使用地理编码 地图坐标和结构化地址,例如地址簿 地址。当您想查找一组位置时使用本地搜索 匹配用户的输入。
但是我已经尝试了这两种方法,它只给了我 1 个结果(即使返回了一个 NSArray。
这是 CLGeocoder 方法:
CLGeocoder *geocoding = [[CLGeocoder alloc] init];
[geocoding geocodeAddressString:theTextField.text completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSLog(@"%i", [placemarks count]);
for(CLPlacemark *myStr in placemarks) {
NSLog(@"%@", myStr);
}
}
}];
这是我的 MKLocalSearch 尝试:
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = theTextField.text;
request.region = self.region;
localSearch = [[MKLocalSearch alloc] initWithRequest:request];
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){
if (error != nil) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Map Error",nil)
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show];
return;
}
if ([response.mapItems count] == 0) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"No Results",nil)
message:nil
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show];
return;
}
self.streets = response;
[self.streetsTableView reloadData];
}];
在某些情况下,MKLocalSearch 似乎返回超过 1 个响应,但这些响应与地点而非街道名称搜索有关。
提前致谢。
【问题讨论】:
-
您是否尝试将区域设置为零?或者您可以分享有关您的 self.region 的更多详细信息吗?
-
我有一个 MapView,我使用 MapView.region 作为 self.region
-
根据我的经验,MKLocalSearch 非常原始。您是否会出于任何原因反对使用 Google Places API?
-
google 有一个more useful api,MKLocalSearch 仅用于简单的任务
标签: objective-c xcode cllocation mklocalsearch