我需要帮助解决这个崩溃问题。我检查了stackoverflow的答案,但没有答案与我的情况有关。这是我的代码。
- (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。
任何建议或提示表示赞赏。如果我需要发布更多代码,请告诉我。
答案 0 :(得分:1)
请注意文档中的讨论:
sourceRect
将此属性与sourceView属性一起使用以指定弹出窗口的锚点位置。或者,您可以使用barButtonItem属性指定弹出窗口的锚点位置。
非常清晰简洁。只需添加一个sourceView参考
答案 1 :(得分:0)
您需要强烈引用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
in
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController{
self.popup = nil;
}