2013-10-05 2 views
1

У меня есть NSMutableArray с картой координат, когда я пытаюсь использовать аннотацию с этой информацией я получаю эту ошибку на линии annotation.coordinate, она работает на IOS 5 и 6:IOS 7 ошибок с аннотациями

- [__ NSCFArray objectForKeyedSubscript]: непризнанные селектор направлен например

у меня есть этот код:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]; 

NSError *error; 
NSArray *array = [NSJSONSerialization JSONObjectWithData:data 
               options:0 
                error:&error]; 


NSString *value = [array valueForKey:@"cortesMap"]; 
NSMutableArray *arr = [[NSMutableArray alloc] init]; 
[arr addObject:value]; 
if (error) 
{ 
    NSLog(@"%s: error=%@", __FUNCTION__, error); 
    return; 
} 

for (NSDictionary *dictionary in arr) 
{ 
    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
    annotation.coordinate = CLLocationCoordinate2DMake([dictionary[@"latitude"] doubleValue], [dictionary[@"longitude"] doubleValue]); 
    annotation.title = dictionary[@"type"]; 
    annotation.subtitle = dictionary[@"description"]; 
    [self.mapView addAnnotation:annotation]; 

} 

и здесь является viewForAnnotation:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKAnnotationView *annotationView= nil; 
    if (![annotation isKindOfClass:[MKUserLocation class]]) 
    { 
     static NSString *annotationViewId = @"annotationViewId"; 
     annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewId]; 
     if (annotationView == nil) 
     { 
      annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewId]; 

      annotationView.canShowCallout = YES; 
      annotationView.image = [UIImage imageNamed:@"pin.png"] 
     } 
     else 
     { 
      annotationView.annotation = annotation; 
     } 
    } 
    return annotationView; 
} 

ответ

0

Ваша ошибка говорит вам, что вы пытаетесь использовать словарь индексацию синтаксис dictionary[key] (который, когда вы используете этот синтаксис, вызывает метод objectForKeyedSubscript) на то, что это не словарь, но на самом деле это массив. Вы должны сделать две вещи:

  1. Прежде всего, подтвердите, какая строка кода вызывает проблему. Я предполагаю, что, на основе кода, который вы выбрали, чтобы поделиться с нами, что вы подозреваете, что из этого кода в for цикле, в котором вы извлекая на coordinate, title и т.д.

    Но вы действительно должны подтвердить, что этот код вызывает проблему (а не что-то еще в вашем коде). Вы можете сделать это с помощью exception breakpoint или одним шагом по этой процедуре.

    Вы должны изучить (либо в отладчике, либо вставив инструкцию NSLog), содержимое объекта dictionary. Ваша ошибка говорит о том, что на самом деле это массив, а не словарь.

  2. Как только вы подтвердили, какая строка кода вызывает проблему, вам необходимо отступить и определить, как точка объекта оказалась в виде массива, а не как словарь. Это может быть либо (а), как этот метод был вызван (например, неверный параметр прошел); или (б), как был создан исходный массив словарей.

+0

строка с ошибкой annotation.coordinate с широтой и долготой, я проверяю массив с nslog и он имеет правильную информацию, которую я хочу. – dastjuso

+0

@ dastjuso Действительно ли 'словарь' действительно' NSDictionary'? Не думает. – Rob

+0

Я добавил новую строку кода для словаря, но все равно получаю такую ​​же ошибку. – dastjuso

Смежные вопросы