2012-02-16 5 views
1

Мне нужна помощь, потому что я не могу отображать аннотацию в моем mapView. Я пытаюсь обновить аннотации с помощью этой функции:MKMapView addAnnotation не на MapView

- (void)addAnnotationsInMap:(NSMutableDictionary *)dico 
{ 
    NSLog(@"Agences Dictionary dico4324 : %@", dico); 
    if ([dico count] > 0) 
    { 
     NSLog(@"Count : %d", [dico count]); 
     for(int i = 0; i < [dico count]; i++) 
     { 
      CGFloat latDelta = [[[dico objectForKey:[NSString stringWithFormat:@"%d", i]] objectForKey:@"latitude"] floatValue]; 
      CGFloat longDelta = [[[dico objectForKey:[NSString stringWithFormat:@"%d", i]] objectForKey:@"longitude"] floatValue];  
      CLLocationCoordinate2D newCoord = 
      { 
       (latDelta), 
       (longDelta) 
      };  
      MapPointAnnotations *mp = [[MapPointAnnotations alloc] 
             initWithCoordinate:newCoord 
                title:[[dico objectForKey:[NSString stringWithFormat:@"%d", i]] objectForKey:@"name"] 
               subTitle:[[dico objectForKey:[NSString stringWithFormat:@"%d", i]] objectForKey:@"street"]]; 
      [agenceMapView addAnnotation:mp];  
     } 
    } 
} 

Если я называю свою функцию в том же классе (LocalizeViewController) с [self addAnnotationsInMap:Dico], аннотаций находятся на MAPview (agenceMapView).

Мне нужно вызвать мою функцию из другого класса (RightSideBarViewController), но аннотации не отображаются на mapView, если я вызываю класс RightSideBarViewController.

Где я вызвать функцию addAnnotationsInMap (класс RightSideBarViewController):

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *identifier = @"LocaliserTop"; 
    UIStoryboard *storyboard; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
    { 
     storyboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil]; 
    } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     storyboard = [UIStoryboard storyboardWithName:@"iPad" bundle:nil]; 
    } 
    LocalizeViewController *localizeViewController = (LocalizeViewController *)[storyboard instantiateViewControllerWithIdentifier:identifier];  
    [self.slidingViewController anchorTopViewOffScreenTo:ECLeft animations:nil onComplete:^{ 
     CGRect frame = self.slidingViewController.topViewController.view.frame; 
     self.slidingViewController.topViewController = localizeViewController; 
     self.slidingViewController.topViewController.view.frame = frame; 
     [self.slidingViewController resetTopView]; 
    }]; 
    [localizeViewController addAnnotationsInMap:agencesDictionary]; 
} 

Есть ли у вас какие-нибудь идеи?

ответ

1

Вы не должны вызывать

[localizeViewController addAnnotationsInMap:agencesDictionary]; 

сразу после

LocalizeViewController *localizeViewController = (LocalizeViewController *)[storyboard instantiateViewControllerWithIdentifier:identifier]; 

потому agenceMapView еще nil. Таким образом, вы в основном делают

[nil addAnnotation:mp]; 

Чтобы исправить это, вы должны ждать, пока localizeViewController грузы из файла СИБ (который займет некоторое время).

Например, вы можете поместить

localizeViewController.annotations = agencesDictionary; 

вместо

[localizeViewController addAnnotationsInMap:agencesDictionary]; 

Тогда в viewDidLoad

[self addAnnotationsInMap:annotations];