iPad在显示照片或拍照时崩溃 - 无源视图

时间:2016-01-06 01:00:05

标签: objective-c ipad uipopovercontroller uialertcontroller

以下代码在iPad上运行时崩溃并显示错误消息:

  

(< UIPopoverPresentationController:0x1377a19e0>)应该是非零的   在演示文稿发生之前设置的sourceView或barButtonItem。'

但是,在我的代码中我有以下内容,我检查了断点和控制台打印,以确保sourceview和barbutton不是nil。我需要做些什么才能避免这种情况?该错误仅出现在iPad上。这是造成麻烦的方法:

- (void)showChooseImageOptions {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *chooseAction = [UIAlertAction actionWithTitle:@"Choose From Photos" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
    [self showLibrary];


}];
UIAlertAction *takeAction = [UIAlertAction actionWithTitle:@"Take Photo" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
    [self showCamera];

}];
self.directionsTextView.text=@"";
[alertController addAction:chooseAction];
[alertController addAction:takeAction];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {



    if (self.imageView.image)   {
        self.directionsTextView.text=@"Tap the circle to change the image";
    } else{
        self.directionsTextView.text=@"Tap the blue circle to choose or take an image";


    }

}];


[alertController addAction:cancelAction];
alertController.view.tintColor=[ColorSuperclass returnApplicationMainColor];






    alertController.popoverPresentationController.barButtonItem = self.navigationItem.rightBarButtonItem;


if ( [alertController respondsToSelector:@selector(popoverPresentationController)] ) {

    // at least iOS8

    alertController.popoverPresentationController.sourceView = self.view;


}

[self presentViewController:alertController animated:YES completion:nil];
}

方法showCamera和showLibrary只是:

-(void)showCamera   {
if (TARGET_IPHONE_SIMULATOR)    {
    //do nothing, the simulator cannot handle pressing the take photos...
} else{
    [self showImagePickerForSourceType:UIImagePickerControllerSourceTypeCamera];
}
}

- (void)showLibrary {
[self showImagePickerForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}

和show source类型方法:

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType {
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.modalPresentationStyle = UIModalPresentationPopover; //this line is very important, because otherwise, the tab bar could go out of scope (a consequence of using modal segues and tab controllers!)
imagePickerController.sourceType = sourceType;
imagePickerController.delegate = self;
imagePickerController.allowsEditing = YES;
[self presentViewController:imagePickerController animated:YES completion:nil];
}

0 个答案:

没有答案