Question

Im trying to retrieve longitude and latitude coordinates for an app that Im making but receive the following error:

  2012-02-14 14:00:33.439 MapApp[13750:11c03] {
   "EVENT_NAME" = "TRIAL EVENT";
   lat = "38.671837";
    lng = "-77.349533";
 }
2012-02-14 14:00:40.759 MapApp[13750:11c03] -[__NSCFArray objectForKey:]: unrecognized       selector sent to instance 0x7955ea0
 2012-02-14 14:00:40.759 MapApp[13750:11c03] *** Terminating app due to uncaught exception    'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector    sent to instance 0x7955ea0'
  *** First throw call stack:
  (0x1728052 0x18b9d0a 0x1729ced 0x168ef00 0x168ece2 0x2680 0x56764e 0x582b89 0x5829bd    0x580f8a 0x580e2f 0x57effb 0x57f85a 0x568fbf 0x56921b 0x56a0f1 0x4d8fec 0x4de572 0x4d872b 0x2196 0x49f9d6 0x4a08a6 0x4af743 0x4b01f8 0x4a3aa9 0x1e38fa9 0x16fc1c5 0x1661022 0x165f90a   0x165edb4 0x165eccb 0x4a02a7 0x4a1a9b 0x20b8 0x2015 0x1)
  terminate called throwing an exception(gdb)

this is my code:

  - (void)viewDidLoad
 {
[super viewDidLoad];

NSString *urlString = [NSString stringWithFormat:jGETUrl];

NSURL *url = [NSURL URLWithString:urlString];

NSData *data = [NSData dataWithContentsOfURL:url];

NSError *error;

NSMutableArray *datas = (NSMutableArray*)[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

NSLog(@"%@", [datas objectAtIndex:0]);


NSNumber *latitude = [datas objectForKey:@"lat"];
NSLog(@"%@", [datas objectForKey:@"lat"]);
NSNumber *longitude =[datas objectForKey:@"lng"]; 
 NSLog(@"%@", [datas objectForKey:@"lng"]);
NSString *eventName =[datas objectForKey:@"EVENT_NAME"];
 NSLog(@"%@", [datas objectForKey:@"EVENT_NAME"]);

CLLocationCoordinate2D coordinate;
coordinate.latitude= latitude.doubleValue;
coordinate.longitude= longitude.doubleValue;
MyLocation *annotation =[[MyLocation alloc] initWithName:eventName address:eventName       coordinate:coordinate];
                         [_mapView addAnnotation:annotation];
 }

Im new to JSON and parsing: I also tried the following combination

  - (void)viewDidLoad
 {
[super viewDidLoad];

NSString *urlString = [NSString stringWithFormat:jGETUrl];

NSURL *url = [NSURL URLWithString:urlString];

NSData *data = [NSData dataWithContentsOfURL:url];

NSError *error;

NSMutableArray *datas = (NSMutableArray*)[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

NSLog(@"%@", [datas objectAtIndex:0]);


NSNumber *latitude = [datas objectAtIndex:1];
NSLog(@"%@", [datas objectAtIndex:1]);
NSNumber *longitude =[datas objectAtIndex:2]; 
 NSLog(@"%@", [datas objectAtIndex:2]);
NSString *eventName =[datas objectAtIndex:3];
 NSLog(@"%@", [datas objectAtIndex:3]);

CLLocationCoordinate2D coordinate;
coordinate.latitude= latitude.doubleValue;
coordinate.longitude= longitude.doubleValue;
MyLocation *annotation =[[MyLocation alloc] initWithName:eventName address:eventName       coordinate:coordinate];
                         [_mapView addAnnotation:annotation];
 }

And it returned the EVENT NAME, lat, lng together for each index. Please help..

Was it helpful?

Solution

this is your code:

NSLog(@"%@",              [datas objectAtIndex:        0]);
NSNumber *latitude =      [datas objectForKey:         @"lat"];
                          ^^^^^^^^^^^^^^^^^^^^^

you have to decide if datas is an array (you can use objectAtIndex:) or an dictionary (you can use objectForKey:). You can't use both because an object can't be NSArray AND NSDictionary at the same time.

And from the exception message (-[__NSCFArray objectForKey:]: unrecognized selector) you can see that the datas object is in fact an array, and you can't use objectForKey: on it.

You should try something like that:

NSDictionary *dict = [datas objectAtIndex:0];
NSNumber *latitude = [dict objectForKey:@"lat"];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top