我需要帮助搞清楚这个崩溃了。 我检查了计算器的答案,但答案不涉及到我的情况。 这是我的代码。
- (void)addImagesActionSheetClickedButtonAtIndex:(NSInteger)buttonIndex
{
// Cancel
if (buttonIndex == 2) return;
//Take picture
if (buttonIndex == 0)
{
//Take picture
isFromLibrary = NO;
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[self.navigationController presentViewController:self.imagePicker animated:YES completion:NULL];
return;
}
// Library picture
if (buttonIndex == 1)
{
if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum]) return;
UIPopoverController *popup = [[UIPopoverController alloc] initWithContentViewController:self.imagePicker];
[popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/4, 0, 0)inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
如果我点击按钮指数1和罢免UIPopoverController
然后单击按钮指数0到拍照我的应用程序崩溃。
这里是我的崩溃报告
“终止应用程序由于未捕获的异常‘NSGenericException’,原因:” UIPopoverPresentationController()应该有一个非空sourceView或barButtonItem呈现发生之前设置。
任何建议或提示赞赏。 如果我需要发布更多的代码,请让我知道。
你需要有很强的参考,以popup
@property (nonatomic, strong) UIPopoverController *popup;
然后使用
- (void)addImagesActionSheetClickedButtonAtIndex:(NSInteger)buttonIndex
{
// Cancel
if (buttonIndex == 2) return;
//Take picture
if (buttonIndex == 0)
{
//Take picture
isFromLibrary = NO;
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[self.navigationController presentViewController:self.imagePicker animated:YES completion:NULL];
return;
}
// Library picture
if (buttonIndex == 1)
{
if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum]) return;
self.popup = [[UIPopoverController alloc] initWithContentViewController:self.imagePicker];
[self.popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/4, 0, 0)inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
并实施UIPopoverControllerDelegate
在
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController{
self.popup = nil;
}
注意文档中的讨论:
sourceRect
使用结合此属性与sourceView属性来指定酥料饼的锚位置。 另外,您也可以指定使用barButtonItem属性酥料饼的锚位置。
很清楚,简明。 只需添加一个sourceView参考
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIPopoverPresentationController_class/index.html#//apple_ref/occ/instp/UIPopoverPresentationController/sourceRect
文章来源: iOS Crash: Terminating app due to uncaught exception reason: UIPopoverPresentationController should have a non-nil sourceView