SpokaneDude
SpokaneDude

Reputation: 4984

Why am I still getting -[UIPopoverController dealloc] reached while popover is still visible

Getting the following error:

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

This is the code causing the problem:

-(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 is defined as an instance variable:

@property (nonatomic, strong) UIPopoverController *popoverController;

I have marked the line causing the crash; I changed all of my PopoverControllers to instance variables and the problem appeared solved, but now has reared it's ugly head. What else can I do to prevent this?

Upvotes: 0

Views: 1543

Answers (3)

kirti Chavda
kirti Chavda

Reputation: 3015

check popoverController is visible or not in showModalTime method because popoverController overwrite

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

Upvotes: 1

Nirav Gadhiya
Nirav Gadhiya

Reputation: 6342

The reason may be this: PopoverController can not find the delegate

Solution: make sure that you have declared delegates of popover in your viewController's .h file like..

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

Then implement delegate method in .m file like..

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

Change the line of assigning of delegate like..

[popoverController setDelegate:self];

Try this..

This may help you.............

Upvotes: 0

jjv360
jjv360

Reputation: 4140

Have you synthesized the property? If not, you may now have a popoverController and a _popoverController variable...

Try change all references to popoverController to self.popoverController...

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

Upvotes: 0

Related Questions