UIPopoverController在运行iOS 5.0.1的iPad上崩溃?

UIPopoverController在运行iOS 5.0.1的iPad上崩溃?,ios,ipad,uiimagepickercontroller,uipopovercontroller,Ios,Ipad,Uiimagepickercontroller,Uipopovercontroller,我在iOS 5上使用UIImagePickerController和iPad,我的应用程序刚刚被拒绝,因为它在终端崩溃了。它不会在我这边崩溃,但我确信它与UIPopoverController有关 请指出任何看起来不好的地方 要显示UIImagePickerController,请执行以下操作: - (IBAction)photoLibraryiPad { if (popoverController) { if ([self.popoverController isPopoverVisi

我在iOS 5上使用UIImagePickerController和iPad,我的应用程序刚刚被拒绝,因为它在终端崩溃了。它不会在我这边崩溃,但我确信它与UIPopoverController有关

请指出任何看起来不好的地方

要显示UIImagePickerController,请执行以下操作:

- (IBAction)photoLibraryiPad {
if (popoverController) {
    if ([self.popoverController isPopoverVisible]) {
        [self.popoverController dismissPopoverAnimated:YES];
        [popoverController setDelegate:nil];
        [popoverController release];
    }
} else {
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    {
        UIImagePickerController *imagePicker =
        [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.sourceType =
        UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.allowsEditing = YES;

        self.popoverController = [[UIPopoverController alloc]
                                  initWithContentViewController:imagePicker];

        popoverController.delegate = self;

        [self.popoverController presentPopoverFromRect:photolibrarybutton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

        [imagePicker release];
    }
}
}

那么这就是他们的结局:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    if ([self.popoverController isPopoverVisible]) {
    [self.popoverController dismissPopoverAnimated:YES];
    [popoverController setDelegate:nil];
    [popoverController release];
}

    [noimageAvailable setHidden:YES];
    UIImage *originalImage = (UIImage *) [info objectForKey:
                                     UIImagePickerControllerEditedImage];  
    [imgPic setImage:originalImage forState:UIControlStateNormal];
    // Hide picker selector
    [picker dismissModalViewControllerAnimated: YES];
    [picker release];

}
两件事:

1) 释放popover时,应将委托设置为nil<调用
[popoverController release]
之前,code>popoverController.delegate=nil。如果您多次尝试使用选择器,它也会崩溃。委托正在调用一个不再存在的对象


2) 检查popover是否可见时,请先检查它是否存在

另外,我相信我在第一个代码片段的else语句中泄漏了popover控制器,我应该如何正确地释放它?我最终修复了崩溃。结果是,在我解雇了拾音器之后,我不得不解雇了爆米花,这是有道理的。但不管怎样,我该怎么修复那个漏洞呢?看起来不错。在委托方法中,在释放选择器之前,将其委托设置为nil。