2014-01-25 4 views
1

У меня есть класс (ViewOpenAppointments), где я создаю и показываю UIPopover. Это код для определения поповера в моем файле .h:- [UIPopoverController dealloc] достигнут, пока popover все еще виден

@interface ViewOpenAppointments : UIView { 

} 

@property (nonatomic, retain) UIPopoverController *popoverController; 
-(void)createOpenAppointmentsPopover: (UIButton *) obViewOpenAppts; 
@end 

У меня есть чек в коде, что если поповер видно, распускать его. Это код:

// create popover 
UIViewController* popoverContent = [[UIViewController alloc] init]; 
// UIView *popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 650, 416)]; 
ViewOpenAppointments *popoverView = [[ViewOpenAppointments alloc]  initWithFrame:CGRectMake(0, 0, 650, 416)]; 

popoverView.backgroundColor = [UIColor whiteColor]; 
popoverContent.preferredContentSize = CGSizeMake(650.0, 416.0); 

// create the popover controller 
popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
popoverController.delegate = (id)self; 
[popoverController setPopoverContentSize:CGSizeMake(650, 416) animated:NO]; 

if ([popoverController isPopoverVisible]) { 
    [popoverController dismissPopoverAnimated:YES]; 
} 

[popoverController presentPopoverFromRect:CGRectMake(650, 416, 10, 50) inView: obViewOpenAppts 
       permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

Проблема заключается в том, что код, чтобы закрыть поповер никогда не ударил, а это значит, что это не видно. Но я все еще получаю сообщение об ошибке (описано в заголовке вопроса).

Что я делаю неправильно?

+1

Если вы не храните контроллер, он освобождается даже в то время как видимый, а вы не –

+0

Контроллер IS сохраняется ... посмотрите код из файла .h – SpokaneDude

+1

это не так;) вот что ' выпуск ". вам нужно будет показать нам, кто держит экземпляр ViewOpenAppoint, который показывает popover –

ответ

6

Вот полный пример управления поповер:

@interface ViewController() <UIPopoverControllerDelegate> 
@property (nonatomic, strong) UIPopoverController* currentPop; 
@end 

@implementation ViewController  

-(IBAction)doPopover1:(id)sender { 
    Popover1View1* vc = [[Popover1View1 alloc] initWithNibName:@"Popover1View1" bundle:nil]; 

    UIPopoverController* pop = [[UIPopoverController alloc] initWithContentViewController:vc]; 
    self.currentPop = pop; 
    [pop presentPopoverFromBarButtonItem:sender 
       permittedArrowDirections:UIPopoverArrowDirectionAny 
           animated:YES]; 
    pop.passthroughViews = nil; 
    // make ourselves delegate so we learn when popover is dismissed 
    pop.delegate = self; 
} 

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)pc { 
    self.currentPop = nil; 
} 

Проверив self.currentPop вы можете убедиться, что вы не представляют два Popovers сразу (незаконное так или иначе).

+1

Обратите внимание: если вы попытались представить два popovers сразу с этим кодом, вы получите именно сообщение, которое получаете, потому что вы снова настройте 'currentPop', тем самым освободив предыдущий' currentPop', который все еще контролирует первый popover, который все еще находится вверх. – matt

+0

Спасибо Мэтту ... Я буду работать с ним и вернуться к вам обоим ... SD – SpokaneDude