Reputation: 4984
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
Reputation: 3015
check popoverController is visible or not in showModalTime method because popoverController overwrite
if ([popoverController isPopoverVisible]) {
[popoverController dismissPopoverAnimated:YES];
}
Upvotes: 1
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
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