Question: I'm trying to create multiple placemarks using `MKMapItem` without using coordinates. 

I used location name directly in `geocodeAdressString:@"Mumbai"...` but I got result for single location. 

While I use multiple locations through array, I'm getting this error:

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

Why is this problem occurring?

```
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];

    }];

}

```

Answer: 
The error state that `-[__NSArrayI length]: unrecognized selector sent to instance 0xab48380'`
NSArray dont have a property length. So it is unable to find the selector of length. So check where you are using NSArray and keep break points to find where error is happening. length is the method of `NSString` and `NSData` but NSArray dont have length, it has count
I have been able to replicate this using this code

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

```

output

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

```

notice how I have used `id` instead of `NSArray` with using `id` I am able to call `length` which isn't allowed by `NSArray`, but this gets round the compiler when using `id`.
So the best way to find out where this is going wrong is add an exception that will catch all exceptions. Do this by selecting the exceptions tab in the project navigator wind >> select '+' >> 'Add Exception Breakpoint...' >> then just select done. This will set a breakpoint every time your app throws an exception.

**EDIT** 

Thanks to the code you have added I suspect that you are passing an `NSArray` where there should be an `NSString`. You create

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

```

then pass it to `geocodeAddressString:addr`

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

```

Just from the name of this parameter I suspect it should be an `NSString` and not an `NSArray` try replacing addr to `[addr objectAtIndex:0]` this will get the string object at index 0 of the addr array.

**EDIT 2**

Here is the method you are calling notice it only allows an `NSString` to be passed in for geocodeAddressString.

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

```