0

我在尝试打开图像选择器时遇到了一个大问题,但不知道为什么我的应用程序在此行崩溃

[self presentViewController:(UIViewController *)imgpkrController animated:YES completion:nil];

我已经在许多应用程序中使用了此代码,并且代码运行良好,但在我当前的应用程序中,此代码给出了首选界面方向的异常。

使用的代码:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if (cameraAvailable == TRUE) {
    if (buttonIndex == 0) {
        imgpkrController.delegate = self;
        imgpkrController.allowsEditing = YES;
        imgpkrController.sourceType = UIImagePickerControllerSourceTypeCamera;
        //[self presentModalViewController:(UIViewController *)imgpkrController animated:YES];
        [self presentViewController:(UIViewController *)imgpkrController animated:YES completion:nil];
    }
    else if(buttonIndex == 1){
        imgpkrController.delegate = self;
        imgpkrController.allowsEditing = YES;
        imgpkrController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        //[self presentModalViewController:(UIViewController *)imgpkrController animated:YES];
        [self presentViewController:(UIViewController *)imgpkrController animated:YES completion:nil];
    }
}
if (buttonIndex == 0) {
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
            imgpkrController.delegate = self;
            imgpkrController.allowsEditing = YES;
            imgpkrController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            //imgpkrController.modalPresentationStyle=UIModalPresentationFullScreen;
            //[self presentModalViewController:imgpkrController animated:YES];
            [self presentViewController:(UIViewController *)imgpkrController animated:YES completion:nil];
            //[self presentViewController:imgpkrController animated:YES completion:nil];
    }
    else{
        NSLog(@"ipad photo");
        imgpkrController.delegate = self;
        popoverController = [[UIPopoverController alloc] initWithContentViewController:imgpkrController];
        [popoverController presentPopoverFromRect:CGRectMake(260.0, 0.0, 400.0, 570.0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }
}
else{
    if (buttonIndex == 0) {
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
        {
            imgpkrController.delegate = self;
            imgpkrController.allowsEditing = YES;
            imgpkrController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            //[self presentModalViewController:(UIViewController *)imgpkrController animated:YES];
            [self presentViewController:(UIViewController *)imgpkrController animated:YES completion:nil];
        }else{
             NSLog(@"ipad photo");
            imgpkrController.delegate = self;
            popoverController = [[UIPopoverController alloc] initWithContentViewController:imgpkrController];
            [popoverController presentPopoverFromRect:CGRectMake(260.0, 0.0, 400.0, 570.0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        }
    }
}

}

代码在此行崩溃

[self presentViewController:(UIViewController *)imgpkrController animated:YES completion:nil];

除了:

2013-07-16 15:11:02.143 HMW[1335:c07] *** Terminating app due to uncaught exception     'UIApplicationInvalidInterfaceOrientation', reason:     'preferredInterfaceOrientationForPresentation must return a supported interface orientation!'
*** First throw call stack:
(0x2ec5012 0x2a7ce7e 0x2ec4deb 0x17a54da 0x19a444c 0x17a24f3 0x17a2777 0x2a663 0x1a952c1 0x2a90705 0x16bb920 0x16bb8b8 0x177c671 0x177cbcf 0x177bd38 0x16eb33f 0x16eb552 0x16c93aa 0x16bacf8 0x38a7df9 0x38a7ad0 0x2e3abf5 0x2e3a962 0x2e6bbb6 0x2e6af44 0x2e6ae1b 0x38a67e3 0x38a6668 0x16b865c 0x2802 0x2735)
libc++abi.dylib: terminate called throwing an exception
4

4 回答 4

0

不确定是什么导致了您的错误消息,因为它似乎与设备方向有关,但我设法使用以下代码使其工作:

- (IBAction)attachPhotosClicked:(id)sender
{
    if (![UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear])
    {        
        _imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [_popoverController presentPopoverFromRect:self.attachButton.frame inView:self.view
                          permittedArrowDirections:(UIPopoverArrowDirectionLeft)
                                          animated:YES];
        return;
    }
    else
    {        
        UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose a source" 
                                                                 delegate:self  
                                                        cancelButtonTitle:@"Cancel" 
                                                   destructiveButtonTitle:nil 
                                                        otherButtonTitles:@"Camera", @"Photo Library", nil];
        [actionSheet showFromRect:self.attachButton.frame inView:self.view animated:YES];
    }
}
于 2013-07-16T10:08:39.750 回答
0

我认为您的问题是由于 iOs 版本问题。iOs 6 中更改了 interfaceOrientation 协议。我认为此链接可以帮助您。 preferredInterfaceOrientationForPresentation 必须返回支持的界面方向

于 2013-07-16T10:20:08.850 回答
0
- (IBAction)selectPhoto:(UIButton *)sender {

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

[self presentViewController:picker animated:YES completion:NULL];
}
于 2013-07-16T10:14:38.263 回答
0

你会在 iOS 6.0 中发现这个问题。看看下面的链接,

iOS 6 中的 UIPopoverController 方向崩溃

它应该在以后的版本中修复。

于 2013-07-16T10:16:10.817 回答