Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 93

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

РСшСниС

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² экзСмпляр класса UIImage ΠΈ присваиваСм этот экзСмпляр свойству image экзСмпляра MKAnnotationView. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ возвращаСтся ΠΊΠ°Ρ€Ρ‚Π΅ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°:


β€” (MKAnnotationView *)mapView:(MKMapView *)mapView

viewForAnnotation:(id <MKAnnotation>)annotation{


MKAnnotationView *result = nil;


if ([annotation isKindOfClass: [MyAnnotation class]] == NO){

return result;

}

}


if ([mapView isEqual: self.myMapView] == NO){

/* ΠœΡ‹ собираСмся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ это событиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ Map View,

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создали Ρ€Π°Π½Π΅Π΅. */

return result;

}


/* Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΈΠΏ Ρ‚ΠΎΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ этот Map View

запустил Π΄Π°Π½Π½ΠΎΠ΅ сообщСниС Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°. */

MyAnnotation *senderAnnotation = (MyAnnotation *)annotation;


/* Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² нашСм собствСнном

классС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, попытаСмся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

для Ρ‚ΠΎΠ³ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сСйчас создаСм. */

NSString *pinReusableIdentifier =

[MyAnnotation

reusableIdentifierforPinColor: senderAnnotation.pinColor];


/* ΠŸΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π½Π΅Π΅, попытаСмся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ

ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Map View. */

MKPinAnnotationView *annotationView = (MKPinAnnotationView *)

[mapView

dequeueReusableAnnotationViewWithIdentifier:

pinReusableIdentifier];


if (annotationView == nil){

/* Π•сли Π½Π°ΠΌ Π½Π΅ ΡƒΠ΄Π°ΡΡ‚ся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€,

создадим Π½ΠΎΠ²Ρ‹ΠΉ. */

annotationView =

[[MKPinAnnotationView alloc] initWithAnnotation: senderAnnotation

reuseIdentifier: pinReusableIdentifier];


/* Π£Π±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π½Ρ‹ выноски ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π² случаС,

Ссли ΠΌΡ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. */

annotationView.canShowCallout = YES;

}


UIImage *pinImage = [UIImage imageNamed:@"BluePin.png"];

if (pinImage!= nil){

annotationView.image = pinImage;

}


result = annotationView;


return result;

}


Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ BluePin.png (Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ нашСго прилоТСния) для любого ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ставится Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса MyAnnotation приводится Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 9.5.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°, относящийся ΠΊ классу MKMapView, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ MKMapViewDelegate ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ mapView: viewForAnnotation:. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся экзСмпляром класса MKAnnotationView. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ подклассом Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ³ΠΎ класса, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ наслСдуСт свойство image. Если ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ этому свойству Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ стандартноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, прСдоставляСмоС Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Map Kit. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 9.4.


Рис. 9.4. НашС собствСнноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² картографичСском Π²ΠΈΠ΄Π΅

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 9.5.

9.7. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… адрСсов Π² Π΄Π°Π½Π½Ρ‹Π΅ ΡˆΠΈΡ€ΠΎΡ‚Ρ‹ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρ‹

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ адрСс ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ мСста, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ Π΅Π³ΠΎ гСографичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (ΡˆΠΈΡ€ΠΎΡ‚Ρƒ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρƒ).

РСшСниС

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ geocodeAddressString: completionHandler: ΠΈΠ· класса CLGeocoder.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Reverse Geocoding) β€” это процСсс получСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ адрСса (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ страны, Π³ΠΎΡ€ΠΎΠ΄Π° ΠΈ Ρ‚. Π΄.) Π½Π° Π±Π°Π·Π΅ извСстного пространствСнного располоТСния (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΡˆΠΈΡ€ΠΎΡ‚Ρ‹ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρ‹). Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это процСсс нахоТдСния пространствСнного располоТСния Π² сСткС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π° основС извСстного адрСса. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ гСокодирования ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ гСокодирования Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² классС CLGeocoder Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Core Location.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ мСстополоТСниС гСокодируСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ адрСса Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ NSString ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ geocodeAddressString: completionHandler:, относящСмуся ΠΊ классу CLGeocoder. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ completionHandler этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

β€’ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠΊ (Ρ‚ΠΈΠΏΠ° NSArray). ΠœΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ критСриям поискового запроса;

β€’ ΠΎΡˆΠΈΠ±ΠΊΡƒ (Ρ‚ΠΈΠΏΠ° NSError), которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π° Π² ΠΊΠΎΠ΄ ошибки, Ссли Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ удастся.

Π˜Ρ‚Π°ΠΊ, сначала объявим свойство Ρ‚ΠΈΠΏΠ° CLGeocoder:


#import Β«ViewController.hΒ»

#import <CoreLocation/CoreLocation.h>


@interface ViewController ()

@property (nonatomic, strong) CLGeocoder *myGeocoder;

@end


@implementation ViewController

ИдСм дальшС. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ΄ для гСокодирования адрСса:

β€” (void)viewDidLoad{

[super viewDidLoad];


/* Π£ нас Π΅ΡΡ‚ΡŒ адрСс. */

NSString *oreillyAddress =

@"1005 Gravenstein Highway North, Sebastopol, CA 95472, USA";


self.myGeocoder = [[CLGeocoder alloc] init];


[self.myGeocoder

geocodeAddressString: oreillyAddress

completionHandler: ^(NSArray *placemarks, NSError *error) {


if ([placemarks count] > 0 &&

error == nil){

NSLog(@"Found %lu placemark(s).", (unsigned long)[placemarks count]);

CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];

NSLog(@"Longitude = %f",

firstPlacemark.location.coordinate.longitude);

NSLog(@"Latitude = %f", firstPlacemark.location.coordinate.latitude);

}

else if ([placemarks count] == 0 &&

error == nil){

NSLog(@"Found no placemarks.");

}

else if (error!= nil){

NSLog(@"An error occurred = %@", error);

}


}];


}


Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° (Π΄Π°ΠΆΠ΅ Π² симуляторС), Π² ΠΎΠΊΠ½Π΅ консоли появятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния (ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСтСвого соСдинСния):


Found 1 placemark(s).

Longitude = -122.8 41135

Latitude = 38.4 10373

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 9.8.

9.8. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΡˆΠΈΡ€ΠΎΡ‚Ρ‹ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρ‹ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ адрСса

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ значСния ΡˆΠΈΡ€ΠΎΡ‚Ρ‹ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π² пространствС. НСобходимо ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ адрСс.

РСшСниС

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ адрСса Π½Π° основании извСстных пространствСнных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (x ΠΈ y) называСтся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Для выполнСния Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ экзСмпляр класса CLGeocoder, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. ΠŸΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

β€’ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠΊ (Ρ‚ΠΈΠΏΠ° NSArray). ΠœΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ критСриям поискового запроса;

β€’ ΠΎΡˆΠΈΠ±ΠΊΡƒ (Ρ‚ΠΈΠΏΠ° NSError), которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π° Π² ΠΊΠΎΠ΄ ошибки, Ссли ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ удастся.

Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° CLGeocoder, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ reverseGeocodeLocation: completionHandler: для выполнСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ гСокодирования.

ВСрхняя Ρ‡Π°ΡΡ‚ΡŒ. m-Ρ„Π°ΠΉΠ»Π° простого ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°, примСняСмого для этой Ρ†Π΅Π»ΠΈ, опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


#import Β«ViewController.hΒ»

#import <CoreLocation/CoreLocation.h>


@interface ViewController ()

@property (nonatomic, strong) CLGeocoder *myGeocoder;

@end


@implementation ViewController


Π’ Ρ…ΠΎΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²ΠΈΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:


β€” (void)viewDidLoad{

[super viewDidLoad];


CLLocation *location = [[CLLocation alloc]

initWithLatitude:+38.41 12810

longitude:-122.8409780f];


self.myGeocoder = [[CLGeocoder alloc] init];


[self.myGeocoder

reverseGeocodeLocation: location

completionHandler: ^(NSArray *placemarks, NSError *error) {


if (error == nil && placemarks.count > 0){

CLPlacemark *placemark = placemarks[0];

/* Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹. */

NSLog(@"Country = %@", placemark.country);

NSLog(@"Postal Code = %@", placemark.postalCode);

NSLog(@"Locality = %@", placemark.locality);

}

else if (error == nil &&

[placemarks count] == 0){

NSLog(@"No results were returned.");

}

else if (error!= nil){

NSLog(@"An error occurred = %@", error);

}


}];

}


β€” (void)viewDidUnload{

[super viewDidUnload];

self.myGeocoder = nil;

}

Если опСрация Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ Π² массивС placemarks Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° CLPlacemark. Π­Ρ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ адрСса, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ значСниям ΡˆΠΈΡ€ΠΎΡ‚Ρ‹ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ сообщили ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ reverseGeocodeLocation: completionHandler:. Π˜Ρ‚Π°ΠΊ, всС, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ нас трСбуСтся, β€” ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² отсутствии ошибок ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² массивС ΠΌΠ΅Ρ‚ΠΎΠΊ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½Π° ΠΌΠ΅Ρ‚ΠΊΠ°.