2013-10-14 24 views
0

得到以下錯誤:爲什麼我仍然得到 - [UIPopoverController的dealloc]達到,而酥料餅仍然可見

-[UIPopoverController dealloc] reached while popover is still visible.

這是導致該問題的代碼:

-(void) showModalTime:(int)tag { 

    UIViewController* popoverContent = [[UIViewController alloc] init]; 
    UIView *popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 216)]; 
    popoverView.backgroundColor = [UIColor redColor]; 
    popoverContent.contentSizeForViewInPopover = CGSizeMake(200.0, 216.0); 

    // smaller for timePicker 
    timePicker=[[UIDatePicker alloc]init]; 
    timePicker.frame = CGRectMake(0, 0, 200, 216); 

    timePicker.backgroundColor = UIColorFromRGB(0xeedd82); 
    timePicker.datePickerMode = UIDatePickerModeTime; 
    [timePicker setMinuteInterval:15]; 
    [timePicker addTarget:self action:@selector(dateDidChange:) forControlEvents:UIControlEventValueChanged]; 

    [popoverView addSubview:timePicker]; 
    popoverContent.view = popoverView; 
    popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
    popoverController.delegate = (id)self; // <-- this is the line that's causing the crash 
    [popoverController setPopoverContentSize:CGSizeMake(200, 216) animated:NO]; 

    switch (tag) { // displays the popover datepicker 
     case 11: // store open time 
      [timePicker setTag:11]; 
      [popoverController presentPopoverFromRect:tfShopOpens.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
      break; 
     case 12: // store close time 
      [timePicker setTag:12]; 
      [popoverController presentPopoverFromRect:tfShopCloses.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
      break; 
    } 

} 

PopoverController被定義爲一個實例變量:

@property (nonatomic, strong) UIPopoverController *popoverController;

我已經標記了導致崩潰的行;我把所有的PopoverController都改成了實例變量,問題似乎已經解決了,但是現在卻讓它變得醜陋。我還能做什麼來防止這種情況發生?

回答

1

檢查popoverController是否可見showModalTime方法因爲popoverCon troller overwrite

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

我加了它;無法重新創建崩潰,但它看起來像你釘住了這個問題。謝謝。 – SpokaneDude

0

你綜合了這個屬性嗎?如果沒有,你現在可以有一個popoverController_popoverController變量...

嘗試更改爲self.popoverControllerpopoverController所有引用...

self.popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
self.popoverController.delegate = (id)self; 
[self.popoverController setPopoverContentSize:CGSizeMake(200, 216) animated:NO]; 
+0

不,它是合成的... – SpokaneDude

+0

您是否在使用ARC? – jjv360

+0

是的,使用ARC ... – SpokaneDude

0

其原因可能是這樣的:PopoverController找不到委託

解決方案:請確保您已聲明在你的viewController的.h文件中像酥料餅的代表..

@interface FooController : UIViewController <UIPopoverControllerDelegate> { 
    // ... 
} 
// ... 
@end 

然後實現委託方法在.m文件如..

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    // do something now that it's been dismissed 
} 

變化代表等分配的線路..

[popoverController setDelegate:self]; 

試試這個..

這可能會幫助你。 ............

+0

不,委託已被分配到.h文件中...這是在構建彈出窗口時發生的(如代碼中所示) – SpokaneDude

+0

嘗試從分配中刪除(id)的轉換像編輯中顯示的代表... –

相關問題