iOSアプリに検索バーを実装しました。Apple Maps アプリケーションと同じ (部分的な結果) 検索ヒントを取得したい。私はアップルがそれをどのように実装したかを調べようとしましたが、グーグルやここでスタックオーバーフローでは成功しませんでした.
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];
}
];
...
入力パラメータは次のとおりです
- searchText: Ess
- 緯度: 51.46
- 経度: 7.01
Apple Maps からの 10 個の結果 (住所関連) の代わりに、最大 2 個の結果 (NSArray *placemarks) を取得します。
都市の完全な名前「エッセン」では、このコードは 1 つの結果のみを返します。Apple は再び 10 をマップします。
部分的な結果を検索ヒントとして表示するために正しい API を使用していますか? そうでない場合、それを正しく行う方法、またはどの API を使用する必要がありますか?
編集: これが重複していない理由を説明するように求められたため、この投稿を編集しています。私の質問は、Apple Maps iOS アプリと同じ結果を得る方法でした。住所の大部分または完全な住所を入力すると、正確な位置が得られます。住所の小さな部分を入力しても、同じ数の結果が得られません。