2013-01-04 3 views
1

Я пытаюсь создать несколько меток с использованием MKMapItem без использования координат.Непризнанные результаты обработки ошибок выбора из geocodeAddressString

Я использовал название местоположения непосредственно в geocodeAdressString:@"Mumbai"..., но я получил результат для одного места.

В то время как я использую несколько мест через массив, я получаю эту ошибку:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0xab48380'

Почему эта проблема возникающую?

Class mapItemClass=[MKMapItem class]; 
if(mapItemClass &&[mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) 
{ 
NSArray *addr=[[NSArray alloc ]initWithObjects:@"Banglore",@"Mumbai",@"Delhi", nil]; 

    CLGeocoder *geocoder=[[CLGeocoder alloc]init]; 
    [geocoder geocodeAddressString:addr completionHandler:^(NSArray *placemarks, NSError *error) { 
     CLPlacemark *geocodedPlacemark=[placemarks objectAtIndex:0]; 
     MKPlacemark *placemark=[[MKPlacemark alloc]initWithCoordinate:geocodedPlacemark.location.coordinate addressDictionary:geocodedPlacemark.addressDictionary]; 
     MKMapItem *mapItem=[[MKMapItem alloc]initWithPlacemark:placemark]; 
     [mapItem setName:geocodedPlacemark.name]; 


     [MKMapItem openMapsWithItems:@[mapItem] launchOptions:nil]; 

    }]; 

} 
+0

Ваша длина вызова в 'NSArray',' NSArray' не имеет длины, в которой они имеют счет. – Popeye

+0

Добавить контрольную точку исключения, чтобы выяснить, какая строка в вашем коде заканчивает выпуск этого звонка – Stavash

+0

Пожалуйста, разместите связанный код. –

ответ

3

состояние ошибки, -[__NSArrayI length]: unrecognized selector sent to instance 0xab48380' NSArray не имеют длину свойства. Таким образом, он не может найти селектор длины. Поэтому проверьте, где вы используете NSArray, и сохраняйте точки останова, чтобы найти, где происходит ошибка. длина метод NSString и NSData но NSArray не имеют длину, то есть рассчитывать

2

Я был в состоянии воспроизвести это, используя этот код

id array = [[NSArray alloc] initWithObjects:@"Hello", @"World", nil]; 
NSLog(@"%d",[array length]); 

выход

-[__NSArrayI length]: unrecognized selector sent to instance 0x96bafe0 

уведомление, как у меня есть используется id вместо NSArray с использованием id Я могу позвонить length, который не разрешен NSArray, но это обходит компилятор при использовании id. Таким образом, лучший способ узнать, где это происходит, - добавить исключение, которое поймает все исключения. Сделайте это, выбрав вкладку исключений в навигаторе проекта wind >> выберите «+» >> «Добавить точку исключения исключений ...» >> затем просто выберите выполненный. Это будет устанавливать точку останова каждый раз, когда ваше приложение выдает исключение.

EDIT

Благодаря код, который вы добавили, я подозреваю, что вы пропускании NSArray там, где должна быть NSString. Вы создаете

NSArray *addr=[[NSArray alloc ]initWithObjects:@"Banglore",@"Mumbai",@"Delhi", nil]; 

затем передать его geocodeAddressString:addr

[geocoder geocodeAddressString:addr completionHandler:^(NSArray *placemarks, NSError *error) { 

Просто от имени этого параметра я подозреваю, что это должно быть NSString, а не NSArray попробуйте заменить эл на [addr objectAtIndex:0] это будет получить объект строки при индексе 0 массива addr.

EDIT 2

Вот метод вы вызываете заметить, что только позволяет NSString быть принят в течение geocodeAddressString.

- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler; 
+0

может any1 направить меня как на ошибку, я сделал..thanks заранее .. –

+1

'[geocoder geocodeAddressString: addr completeHandler:^(NSArray * placemarks, ошибка NSError *) {' В этой строке вы передаете геокодAddressString 'NSArray' вам должен быть передан 'NSString' – Popeye

+0

, можно ли через 2-х или 3-х местах пройти через NSString? –