如何从手机图库中获取照片?

时间:2013-07-16 09:51:17

标签: iphone ios objective-c uikit uiimagepickercontroller

我有一个很大的问题,因为我正在尝试打开图片选择器,但不知道为什么我的应用程序在此行崩溃

[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 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分: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];
}

答案 2 :(得分:0)

您将在iOS 6.0中找到此问题。看看下面的链接,

UIPopoverController orientation crash in iOS 6

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

答案 3 :(得分:0)

我认为您的问题是由于iOs版本问题造成的。在iOs 6中更改了interfaceOrientation协议。 我认为这个链接可以帮到你。 preferredInterfaceOrientationForPresentation must return a supported interface orientation