我在 iOS 应用程序中实现了搜索栏。我想获得与 Apple Maps 应用程序相同的(部分结果)搜索提示。我试图找出苹果是如何实现它的,但我在谷歌或在 stackoverflow 上没有成功。
在我的 UITableView *searchHintTableView 中准确显示什么并不重要。我只是没有得到正确数量的搜索提示。我在同一设备和同一 3G wifi 网络(3G SIM 路由器)上使用我的应用程序和 Apple Maps 应用程序。
我尝试了什么:
- 我试图用半径指定区域。
- 从先前的请求中取消地理编码。
在方法中:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
我有以下代码:
...
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
NSString *location = [NSString stringWithFormat:@"%@", searchText];
// CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coord
// radius:100000000 identifier:@"Hint Region"];
// [geocoder cancelGeocode];
[geocoder geocodeAddressString:location
completionHandler:^(NSArray *placemarks, NSError *error) {
if (error != nil) {
DDLogCVerbose(@"Error %@", [error description]);
[searchHintArray removeAllObjects];
[searchHintTableView reloadData];
return;
}
DDLogCVerbose(@"CLGeocoder >> %@", [placemarks description]);
//to get rid of unwanted results when searchText is inadequate
//even when previous partial results are not removed I don't get that many results as Apple Maps application.
[searchHintArray removeAllObjects];
[placemarks enumerateObjectsUsingBlock:^(CLPlacemark *placemark, NSUInteger idx, BOOL *stop) {
MKPlacemark *mkPlacemark = [[MKPlacemark alloc] initWithPlacemark:placemark];
[searchHintArray addObject:mkPlacemark];
}];
[searchHintTableView reloadData];
}
];
...
输入参数如下
- 搜索文本:Ess
- 纬度:51.46
- 经度:7.01
而不是来自 Apple Maps 的 10 个结果(地址相关),我最多得到 2 个(NSArray *placemarks)。
使用城市“埃森”的完整名称,此代码仅返回 1 个结果。苹果再次映射 10。
我是否使用正确的 API 将部分结果显示为搜索提示?如果没有,那么如何正确执行或我应该使用哪个 API?
编辑: 当我被要求解释为什么这不重复时,我正在编辑这篇文章。我的问题是如何获得与 Apple Maps iOS 应用程序相同的结果。当我输入大部分地址或完整地址时,我会得到准确的位置。当我输入一小部分地址时,我只是没有得到相同数量的结果。