UIPopovercontroller dealloc reached while popover is still visible UIPopovercontroller dealloc reached while popover is still visible ios ios

UIPopovercontroller dealloc reached while popover is still visible


UIPopoverControllers should always be held in an instance variable. It is a good practice to create a strong property for it.

UPDATE:

As of iOS 8 you should be using UIPopoverPresentationController. Then you don't need to keep a reference to the popover because it is managed by the presentation controller.

Code example (works both on iPhone and iPad):

UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.delegate = self;picker.sourceType = UIImagePickerControllerSourceTypeCamera;picker.allowsEditing = YES;picker.modalPresentationStyle = UIModalPresentationPopover;UIPopoverPresentationController* popoverPC = picker.popoverPresentationController;popoverPC.barButtonItem = bbItem;popoverPC.permittedArrowDirections = UIPopoverArrowDirectionAny;[self presentViewController:picker animated:YES completion:nil];


When the function exits there are no other reference to the popover controller, so it's deallocated too early.

Try adding it as a member of your class instead.

Tim


Adding what @phix23 answered, create *poc property like this:

@property (nonatomic, retain) IBOutlet UIPopoverController *poc;

and then change

UIPopoverController *poc = [[UIPopoverController alloc]                             initWithContentViewController:picker];

for

self.poc = [[UIPopoverController alloc]                             initWithContentViewController:picker];