我希望允许用户搜索街道名称,并在UITableView中显示结果。目前地区不重要,可以来自任何地区。
我在搜索中找不到任何相关的示例,也不知道应该使用CLLocation还是MKLocalSearch。
根据文档,我应该使用MKLocalSearch:
虽然本地搜索和地理编码类似,但它们支持不同的用例。当您想在地图坐标和结构化地址(例如通讯录地址)之间进行转换时,请使用地理编码。当您想查找与用户输入匹配的一组位置时,请使用本地搜索。
但是,我已经尝试了两种方法,它只给我返回1个结果(即使有一个NSArray返回)。
这是CLGeocoder方法的实现:
我在搜索中找不到任何相关的示例,也不知道应该使用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似乎在某些情况下返回多个响应,但这些与地点搜索而非街道名称搜索有关。
提前感谢。