2014-01-25 103 views
1

我有一個類(ViewOpenAppointments),我創建並顯示一個UIPopover。這是我的.h文件中定義酥料餅代碼:- [UIPopoverController dealloc]達到彈出仍然可見

@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]; 

問題是解除popover的代碼從來沒有命中,這意味着它不可見。但我仍然收到錯誤消息(在問題標題中進行了描述)。

我在做什麼錯?

+1

如果你不保留控制器,即使在可見的情況下它也會被釋放,而你也不會保留 –

+0

控制器被保留......看看.h文件中的代碼 – SpokaneDude

+1

它不是;)那就是'問題'節目。您需要向我們展示誰持有ViewOpenAppointments的實例,顯示彈出窗口 –

回答

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

請注意,如果您嘗試使用此代碼一次呈現兩個彈出窗口,您將得到完全正確的消息,因爲您會再次設置'currentPop',從而釋放之前的'currentPop',它仍然控制着仍然在運行的第一個popover。 – matt

+0

謝謝馬特......我會和你一起工作,回到你們身邊...... SD – SpokaneDude