2011-12-13 39 views
0

我在iPad 5上使用UIImagePickerController,并且我的应用刚刚被拒绝,因为它在它们的末端坠毁。它不会在我的结尾崩溃,但我相信它与UIPopoverController有关。运行iOS 5.0.1的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]; 

} 

回答

2

两件事情:

1)当你释放popover时,你应该选择代表无。 popoverController.delegate = nil,然后致电[popoverController release]。如果您尝试多次使用选取器,它很可能会为您崩溃。代表正在调用不再存在的对象。

2)当检查弹出窗口是否可见时,请检查以确保它首先存在。

+0

检查我编辑的代码 –

+0

另外我相信我在第一个代码片段的else语句中泄漏了popover控制器,我应该如何正确释放它? –

+0

我最终修复了崩溃。事实证明,在我解雇那个有意义的选择器之后,我不得不解雇这个弹窗。但无论如何,我将如何解决泄漏问题? –