5

我在 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 应用程序相同的结果。当我输入大部分地址或完整地址时,我会得到准确的位置。当我输入一小部分地址时,我只是没有得到相同数量的结果。

4

0 回答 0