ユーザーが通りの名前を検索して、結果を UITableView に表示できるようにしたいと考えています。現時点では地域は重要ではありません。どの地域からでもかまいません。
検索で関連する例を見つけることができず、CLLocation と MKLocalSearch のどちらを使用すべきかわかりません。
ドキュメントに基づいて、MKLocalSearch を使用する必要があります。
ローカル検索とジオコーディングは似ていますが、サポートされるユース ケースは異なります。マップ座標とアドレス帳の住所などの構造化された住所との間で変換する場合は、ジオコーディングを使用します。ユーザーの入力に一致する一連の場所を検索する場合は、ローカル検索を使用します。
しかし、私は両方の方法を試しましたが、返される NSArray があるにもかかわらず、1 つの結果しか得られません。
これは 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 は場合によっては複数の応答を返すようですが、これらは通りの名前の検索ではなく、場所に関連しています。
前もって感謝します。