MKMapView addAnnotation не в MapView - PullRequest
       28

MKMapView addAnnotation не в MapView

1 голос
/ 16 февраля 2012

Мне нужна помощь, потому что я не могу отобразить аннотацию в моем 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 (Class 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 Ответ

1 голос
/ 16 февраля 2012

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

[localizeViewController addAnnotationsInMap:agencesDictionary];

сразу после

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

потому что agenceMapView по-прежнему nil. Итак, вы в основном делаете

[nil addAnnotation:mp];

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

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

localizeViewController.annotations = agencesDictionary;

вместо

[localizeViewController addAnnotationsInMap:agencesDictionary];

Тогда в viewDidLoad

[self addAnnotationsInMap:annotations];
...