UIPopoverController 在运行 iOS 5.0.1 的 iPad 上崩溃?
Posted
技术标签:
【中文标题】UIPopoverController 在运行 iOS 5.0.1 的 iPad 上崩溃?【英文标题】:UIPopoverController crash on iPad running iOS 5.0.1? 【发布时间】:2011-12-13 02:11:10 【问题描述】:我在 iPad 上使用 ios 5 上的 UIImagePickerController,我的应用程序刚刚被拒绝,因为它最终崩溃了。它不会在我这边崩溃,但我确信它与 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】:两件事:
1) 当你释放弹出框时,你应该将delegate设置为nil。 popoverController.delegate = nil
在致电 [popoverController release]
之前。如果您尝试多次使用选择器,它也可能会崩溃。委托正在调用一个不再存在的对象。
2) 检查弹出框是否可见时,首先检查它是否存在。
【讨论】:
另外我相信我在第一个代码 sn-p 的 else 语句中泄漏了弹出框控制器,我应该如何正确释放它? 我最终修复了崩溃。事实证明,在我关闭选择器后,我不得不关闭弹出框,这是有道理的。但无论如何,我将如何修复泄漏? 看起来不错。在委托方法中,在释放之前将选取器的委托设置为 nil。以上是关于UIPopoverController 在运行 iOS 5.0.1 的 iPad 上崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
UIPopoverController 在 iOS 8 中的大小不正确
UIPopoverController、Xcode 6、IOS 8 使用 Swift