iOS崩溃:由于未捕获的exception原因终止应用程序:UIPopoverPresentationController应该有一个非零的sourceView
我需要帮助找出这个崩溃。 我检查了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]; } }
如果我点击button索引1并closuresUIPopoverController
然后单击button索引0拍照我的应用程序崩溃。
这是我的崩溃报告
'终止应用程序,由于未捕获的exception'NSGenericException',原因:'UIPopoverPresentationController()应该有一个非零的sourceView或barButtonItem在演示之前设置。
任何build议或提示表示赞赏。 如果我需要发布更多的代码,请让我知道。
你需要有一个强大的参考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属性结合使用可指定popup窗口的锚点位置。 或者,您可以使用barButtonItem属性指定popup窗口的锚点位置。
很清楚,简洁。 只需添加一个sourceView引用