2013-10-05 41 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. 確認哪一行代碼導致問題後,您需要退後一步,確定對象點是如何以數組而不是字典的形式結束的。它可以是(a)如何調用這個方法(例如傳遞了錯誤的參數);或(b)如何創建原始字典陣列。

+0

帶有錯誤的行是annotation.coordinate與經度和緯度,我用nslog檢查數組,並且它具有我想要的正確信息。 – dastjuso

+0

@dastjuso'dictionary'對象真的是'NSDictionary'嗎?沒有。 – Rob

+0

我爲字典添加了一行新的代碼,但仍然出現相同的錯誤。 – dastjuso