UIPopovercontroller dealloc在popup窗口仍然可见时到达
我向你保证,我确实在我的问题中寻找答案,但没有一个是有帮助的。 在这里我得到了一个简单的代码,应该在UIPopoverController
提供一个UIImagePickerController
:
-(void)takePicture:(id)sender{ UIImagePickerController *picker=[[UIImagePickerController alloc] init]; picker.delegate=self; picker.sourceType=UIImagePickerControllerSourceTypeCamera; picker.allowsEditing=YES; UIPopoverController *poc=[[UIPopoverController alloc] initWithContentViewController:picker]; [poc presentPopoverFromBarButtonItem:bbItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO]; }
现在,即使从第一次,我得到[UIPopoveController dealloc]
而…错误和程序崩溃。 根据ARC,我没有做任何保留,放弃或autoreleases。 从ARC受益时, UIPopoverControllers
有没有特别的考虑?
UIPopoverControllers应该始终保存在一个实例variables中。 为它创造一个强大的财产是一个很好的做法。
更新:
从iOS 8开始,您应该使用UIPopoverPresentationController
。 然后,您不需要保留对该popup窗口的引用,因为它由演示文稿控制器进行pipe理。
代码示例(适用于iPhone和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];
当函数退出时,没有其他对popover控制器的引用,所以它被释放得太早。
尝试添加它作为您class级的成员。
蒂姆
添加@ phix23回答什么,创build* poc属性是这样的:
@property (nonatomic, retain) IBOutlet UIPopoverController *poc;
然后改变
UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:picker];
对于
self.poc = [[UIPopoverController alloc] initWithContentViewController:picker];