UIPopoverController закрывается без вызова делегата

У меня есть представление карты, из которого я добавляю и удаляю annotationsна основе переключателя в popovercontroller. Когда я касаюсь за пределами popover, он правильно закрывается и вызывает метод delegatepopoverControllerDidDismissPopover:. Проблема, с которой я сталкиваюсь, заключается в том, что когда я переключаю переключатель в popover(, касаясь во всплывающем окне ),если я удаляю annotationsс карты, он ведет себя правильно, и всплывающее окно остается видимым, но если я добавляю annotationsв представление карты, тогда popoverисчезает, а метод delegateне вызывается. Кто-нибудь сталкивался с таким поведением раньше?

Единственная разница между кодом включения и выключения переключателя заключается в том, что один из них удаляет annotationsиз массива, а другой добавляет annotations. Это проблема только при добавлении annotationsв вид карты. Любая помощь или предложения будут оценены.

Вот как отображается popover:

-(IBAction)toggleMapFiltersView:(id)sender
 {
    LayerPopoverViewController *popOverViewController = [[LayerPopoverViewController alloc] init];
    [popOverViewController setDelegate:self];
    [popOverViewController setBranchesShowing:branchesShowing];
    [popOverViewController setSchoolsShowing:schoolsShowing];

    [layersButton setSelected:YES];

    popoverController = [[UIPopoverController alloc]   initWithContentViewController:popOverViewController];


    [popoverController setDelegate:self];
    [popOverViewController release];
    [popoverController presentPopoverFromRect:layersButton.frame
                                       inView:[self view] 
                     permittedArrowDirections:UIPopoverArrowDirectionAny 
                                     animated:YES];
}

Это метод, который вызывается из всплывающего окна:

-(IBAction)toggleSchools:(id)sender
{
    if ([self.delegate respondsToSelector:@selector(didChangeSchoolsDisplaySettingWithVisible:)])
    {
        if ([schoolsSwitch isOn])
        {
        [self.delegate didChangeSchoolsDisplaySettingWithVisible:YES];
             self.schoolsShowing = YES;
        }
        else
        {
            [self.delegate didChangeSchoolsDisplaySettingWithVisible:NO];
            self.schoolsShowing = NO;
        }
    }
}

и это метод, на который он ссылается:

-(void)didChangeSchoolsDisplaySettingWithVisible:(BOOL)visible
{
    if (visible == YES)
    {
        schoolsShowing = YES;
        if (self.schoolArray != nil && [self.schoolArray count] > 0)
        {
            for (MySchool *school in self.schoolArray)
            {
                [mapView addAnnotation:school];
            }
        }
    }
    else
    {
        schoolsShowing = NO;
        for (id<MKAnnotation> annotation in mapView.annotations)
        {
            if ([annotation isKindOfClass:[MySchool class]])
            {
                [mapView removeAnnotation:annotation];
            }
        }
    }
}
10
задан iDev 2 November 2012 в 00:52
поделиться