简体   繁体   English

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

[英]How do I get a photo from the phone gallery?

I have a huge problem as am trying to open image picker but don't know why my app crashes at this line 我在尝试打开图片选择器时遇到了一个很大的问题,但不知道为什么我的应用程序在此行崩溃

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

I have used this this code in many application and code is working fine but in my current apps this code giving exception of preferred interface orientation. 我已经在许多应用程序中使用了此代码,并且代码运行良好,但是在我当前的应用程序中,此代码提供了首选的界面方向例外。

The code which is used : 使用的代码:

-(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];
        }
    }
}

} }

Code crashes on this line 代码在此行崩溃

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

with exception: 例外:

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

Not sure what's causing your error message as it seems to be related to the device orientation but I managed to get this working with the following code: 不知道是什么导致了您的错误消息,因为它似乎与设备方向有关,但是我设法通过以下代码使它起作用:

- (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];
    }
}
- (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];
}

You will find this issue in iOS 6.0. 您将在iOS 6.0中发现此问题。 have a look at the following link, 看一下下面的链接,

UIPopoverController orientation crash in iOS 6 iOS 6中的UIPopoverController方向崩溃

It should be fixed in later versions. 它应该在更高版本中修复。

I think your problem is due to an iOs version problem. 我认为您的问题是由于iOs版本问题引起的。 The interfaceOrientation protocol is changed in iOs 6. I think this link could help you. 在iO 6中更改了interfaceOrientation协议。我认为此链接可以为您提供帮助。 preferredInterfaceOrientationForPresentation must return a supported interface orientation ? preferredInterfaceOrientationForPresentation是否必须返回支持的接口方向

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM