Ios uialertcontroller uiimagepicker dismiss : app crash - ios

I have created a new app under xcode 6 and an old cold no more work.
Since iOS 8 we use UIalertcontroller to show action sheet
I use it to lauch photolibrary and select a picture but when I want to dismiss the picker, my app crash and I don't know why.
Below my code:
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
UIAlertController * uiViewActionSheet= [UIAlertController
alertControllerWithTitle:#"Action"
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* chooseExisting = [UIAlertAction
actionWithTitle:NSLocalizedString(#"CHOOSE_EXISTING",#"Choose Existing")
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
//Do some thing here
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
[uiViewActionSheet dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction* cancel = [UIAlertAction
actionWithTitle:#"Cancel"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * action)
{
[uiViewActionSheet dismissViewControllerAnimated:YES completion:nil];
}];
[uiViewActionSheet addAction:chooseExisting];
[uiViewActionSheet addAction:cancel];
[self presentViewController:uiViewActionSheet animated:YES completion:nil];
Below the imagepicker function :
(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.uImageProfile.image = chosenImage;
self.lstatutImage.text = #"save";
[picker.presentingViewController dismissViewControllerAnimated:YES completion:nil];
if(picker.sourceType == UIImagePickerControllerSourceTypeCamera)
{
UIImageWriteToSavedPhotosAlbum(chosenImage, nil, nil, nil);
}
__block NSString* resultSaveImage = #"";
//Save image onthe server
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
resultSaveImage = [controllerObject saveProfileImage:self.uImageProfile.image];
dispatch_async(dispatch_get_main_queue(), ^{
if(![resultSaveImage isEqualToString:#"\"ok\""])
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(#"ERROR",#"Error") message:resultSaveImage delegate:self cancelButtonTitle:#"Ok" otherButtonTitles:nil, nil];
[alert show];
}
});
});
}
My code crash here :
[picker.presentingViewController dismissViewControllerAnimated:YES completion:nil];
Have you any idea ?

You're dismissing the picker, and then calling it:
[picker.presentingViewController dismissViewControllerAnimated:YES completion:nil];
if(picker.sourceType == UIImagePickerControllerSourceTypeCamera) {...
You also don't need the [uiViewActionSheet dismissViewControllerAnimated:YES completion:nil]; lines!
Try moving the dismiss line to the end. If it still crashes, it might be that the presentingViewController is not alive anymore.

Related

Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled} with Objective C Xcode 9.3 iOS 11

I'm using UIImagePickerController to get image from device. I've implemented the following steps:
Permission is taken:
Privacy - Photo Library Usage Description - info.plist
Instance of UIImagePickerController is created and presented. Delegate is assigned to self. Camera or Library options are given with UIAlertController.
-(void) openGallery {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
[actionSheet addAction:[UIAlertAction actionWithTitle:#"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}]];
[actionSheet addAction:[UIAlertAction actionWithTitle:#"Camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
// take photo button tapped.
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:NULL];
}]];
[actionSheet addAction:[UIAlertAction actionWithTitle:#"Photo Library" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
// PhotoLibrary
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
}]];
[self presentViewController:actionSheet animated:YES completion:nil];
}
On delegate, image has arrived but, when I tried to upload it to server after converting it into base64, the AFNetworking threw error:
Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}
with Objective C Xcode 9.3 iOS 11
#pragma mark- UIImagePicker Delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
[picker dismissViewControllerAnimated:YES completion:NULL];
[self.view setUserInteractionEnabled:NO];
[self uploadThemeServiceCall: chosenImage];
}
I tried creating OS_ACTIVITY_MODE to disable in environment variable, but it didn't work. I tried other solutions available but still it din't work. It was working fine but now it's not.
A:) Make sure object chosenImage is not nil.
B:) Use NSData *imageData = UIImageJPEGRepresentation(imageObject , 1) to convert chosenImage into NSData . Use this imageData as ur NSUrlRequest body.
Alse show your code for Function uploadThemeServiceCall here.

Application terminating while clicking camera use image button objective c

My application terminates showing Message from debugger: Terminated due to signal 9 after doing rigorous searching didn't find any thing , i have also checked for memory leaks but does not find any..
Problem Statement - When i open camera from my app and after capturing image when i select use image my app terminates.
My Code
- (void)imagePickerController:(UIImagePickerController )picker didFinishPickingMediaWithInfo:(NSDictionary )info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
UIImageWriteToSavedPhotosAlbum(chosenImage, nil, nil, nil);
[picker dismissViewControllerAnimated:YES completion:NULL];
}
I used to select image from both camera and gallery using imagepicker with uialertactionsheet. This code is working for me, so you try this. And use these delegate's
- (IBAction)Camera_Click:(id)sender
{
UIAlertController *alertView = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
// Photos from Gallery by calling Method
UIAlertAction *choose = [UIAlertAction actionWithTitle:#"Select from photos" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self performSelector:#selector(choosePhotoFromGallery)];
[alertView dismissViewControllerAnimated:YES completion:nil ];
}];
//Take New Photo From Camara
UIAlertAction *Capture = [UIAlertAction actionWithTitle:#"Capture from camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self performSelector:#selector(takePhotoFromCamara)];
[alertView dismissViewControllerAnimated:YES completion:nil ];
}];
UIAlertAction *Cancel = [UIAlertAction actionWithTitle:#"Cancel" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action){
}];
//Adding the alertView Actions
[alertView addAction:choose];
[alertView addAction:Capture];
[alertView addAction:Cancel];
//Presents the AlertView
[self presentViewController:alertView animated:YES completion:nil];
}
- (void)takePhotoFromCamara
{
UIImagePickerController *Take_pic = [[UIImagePickerController alloc] init];
Take_pic.delegate = self;
Take_pic.allowsEditing = YES;
Take_pic.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:Take_pic animated:YES completion:NULL];
}
- (void)choosePhotoFromGallery
{
UIImagePickerController *Choose_picker = [[UIImagePickerController alloc] init];
Choose_picker.delegate = self;
Choose_picker.allowsEditing = YES;
Choose_picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:Choose_picker animated:YES completion:NULL];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *imgPicker = [info objectForKey:#"UIImagePickerControllerOriginalImage"];
self.your_imgView.image = imgPicker;
[picker dismissViewControllerAnimated:YES completion:NULL];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissViewControllerAnimated:YES completion:NULL];
}
**Finally you add this two in your app info.plist file, otherwise app will crash.
<key>NSPhotoLibraryUsageDescription</key>
<string><$YourAppname$>We access your photo library.</string>
<key>NSCameraUsageDescription</key>
<string><$YourAppname$>We access your camera.</string>**

Warning when I take a photo with an iPad

When I take a photo with my iPad, the following message appears on the console:
Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.
This is my code to take a photo and save it:
- (IBAction)selectPhoto:(id)sender {
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* camera = [UIAlertAction actionWithTitle:#"Take Photo" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
_imagePickerController = [[UIImagePickerController alloc] init];
_imagePickerController.allowsEditing = YES;
_imagePickerController.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
[_imagePickerController setSourceType: UIImagePickerControllerSourceTypeCamera];
_imagePickerController.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self presentViewController:_imagePickerController animated:YES completion:nil];
}
else {
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:#"Camera not detected"
message:#""
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction
actionWithTitle:#"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
}];
[alert addAction:ok];
[self presentViewController:alert animated:YES completion:nil];
}
}];
[alertController addAction:camera];
[alertController.view layoutIfNeeded];
UIPopoverPresentationController *pop = alertController.popoverPresentationController;
alertController.popoverPresentationController.sourceRect = self.button.frame;
alertController.popoverPresentationController.sourceView = self.view;
pop.permittedArrowDirections = UIPopoverArrowDirectionAny;
pop.delegate = self;
[self presentViewController:alertController animated:YES completion:nil];
}
And get the new image:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:#"public.image"]){
_img = [info objectForKey:UIImagePickerControllerEditedImage];
[_button setBackgroundImage:_img forState:UIControlStateNormal];
[_button setTitle:#"" forState:UIControlStateNormal];
}
[self.imagePickerController dismissViewControllerAnimated:YES completion:nil];
}
Warning appears when I click in Take photo.
Hope this helps:
pragma mark- UIImagePickerController Delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *yourImage = info[UIImagePickerControllerOriginalImage];
[picker dismissViewControllerAnimated:YES completion:nil];
}

Cancel button not working in UIImagePickerView

I am use UIImagePickerView in my code in which three buttons are there. One to take photo, second to choose photo and third to cancel. The code as below:
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:#"Select the operation to proceed?"
delegate:self
cancelButtonTitle:#"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:#"Take Photo", #"Select Photo", nil];
[actionSheet showInView:self.view];
When I click on the Cancel button it does not work.
I am using UIImagePickerViewDelegate method as below.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
#try {
//set selected image in imageview by imagepickerview
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
imgProfilePic.image = chosenImage;
[picker dismissViewControllerAnimated:YES completion:nil];
}
#catch (NSException *exception) {
NSLog(#"%#",exception.description);
}
}
//- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
//{
// NSLog(#"####");
// [picker dismissViewControllerAnimated:YES completion:NULL];
//}
Please check my code for UIImagePickerView and provide me guidance for correct code.
#pragma mark - Actionssheet delegate method for Image
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
#try {
if(buttonIndex != 3)
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
if(buttonIndex == 0)
{
NSLog(#"Choose Photo from Camera");
//simulator has no camera so app will crash, below call just provide the alert that device has no camera.
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:#"Error"
message:#"Device has no camera"
delegate:nil
cancelButtonTitle:#"OK"
otherButtonTitles: nil];
[myAlertView show];
}
else
{
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
}
if(buttonIndex == 1)
{
NSLog(#"Choose Photo from Gallary");
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
// if (buttonIndex == 3)
// {
// NSLog(#"###");
// }
//
// else
// {
// NSLog(#"Cancel the tab");
// [picker dismissViewControllerAnimated:YES completion:NULL];
//
// }
[self presentViewController:picker animated:YES completion:nil];
}
}
#catch (NSException *exception) {
NSLog(#"%#",exception.description);
}
}
I think you are new for the stackOverflow and iOS application Development. That UIActionsheet and UIImagePickerController both are different things. So if you are create a actiohsheet like:
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:#"Select the operation to proceed?"delegate:self
cancelButtonTitle:#"Cancel"
destructiveButtonTitle:nil otherButtonTitles:#"Take Photo", #"Select Photo", nil];
[actionSheet showInView:self.view];
Now you can called its button method like following:
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex==0)
{
// take photo selected
}
else if (buttonIndex==1)
{
// select photo selected
}
else
{
// cancel button selected
}
}
You can also use UIAlertController that is the replacement of UIAlert and UIActionSheet from iOS8 so you can use like following:
UIAlertController* AlertSheet = [UIAlertController alertControllerWithTitle:#"New ActionSheet" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:#"Action" style:UIAlertActionStyleDefault //
handler:^(UIAlertAction * action) {
NSLog(#"Action");
}];
[AlertSheet addAction:defaultAction];
UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:#"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}];
[AlertSheet addAction:cancleAction];
[self presentViewController:AlertSheet animated:YES completion:nil];
You can try this code its work for me
UIAlertController* alert = [UIAlertController
alertControllerWithTitle:nil // Must be "nil", otherwise a blank title area will appear above our two buttons
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* button0 = [UIAlertAction
actionWithTitle:#"Cancel"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * action)
{
// UIAlertController will automatically dismiss the view
}];
UIAlertAction* button1 = [UIAlertAction
actionWithTitle:#"Take photo"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
// The user tapped on "Take a photo"
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:NULL]; }];
UIAlertAction* button2 = [UIAlertAction
actionWithTitle:#"Choose Existing"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
// The user tapped on "Choose existing"
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
}];
[alert addAction:button0];
[alert addAction:button1];
[alert addAction:button2];
[self presentViewController:alert animated:YES completion:nil];
UIActionSheet is deprecated since iSO 8. You should use UIAlertController
UIAlertController* alert = [UIAlertController
alertControllerWithTitle:nil // Must be "nil", otherwise a blank title area will appear above our two buttons
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* button0 = [UIAlertAction
actionWithTitle:#"Cancel"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * action)
{
// UIAlertController will automatically dismiss the view
}];
UIAlertAction* button1 = [UIAlertAction
actionWithTitle:#"Take photo"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
// The user tapped on "Take a photo"
UIImagePickerController *imagePickerController= [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.delegate = self;
[self presentViewController:imagePickerController animated:YES completion:^{}];
}];
UIAlertAction* button2 = [UIAlertAction
actionWithTitle:#"Select Photo"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
// The user tapped on "Select Photo"
UIImagePickerController *imagePickerController= [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePickerController.delegate = self;
[self presentViewController:imagePickerController animated:YES completion:^{}];
}];
[alert addAction:button0];
[alert addAction:button1];
[alert addAction:button2];
[self presentViewController:alert animated:YES completion:nil];

Warning message after actionSheet buttons are pressed

I am very new to iOS development and have encountered an error that I just can't seem to find a solution for. I have searched for solutions everywhere, but maybe it is my newness that is preventing me from seeing the problem.
The exact warning that is printed in the log is:
Attempt to dismiss from view controller <_UIAlertShimPresentingViewController: 0x7aaa4b90> while a presentation or dismiss is in progress!
It occurs right after I touch a button on the actionSheet.
Here is the code:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
if (buttonIndex == 0) {
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:nil];
}
else if (buttonIndex == 1) {
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:nil];
}
else if (buttonIndex == 2) {
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:picker animated:YES completion:nil];
}
} else {
if (buttonIndex == 0) {
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:NO completion:NULL];
}
else if (buttonIndex == 1) {
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:picker animated:YES completion:NULL];
}
}
}
The implementation of the actionSheet, I have the IBAction connected a toolbar button located an the .xib file.
- (IBAction)addImage:(id)sender {
UIActionSheet *popUpSheet = [[UIActionSheet alloc]
initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles: nil];
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
[popUpSheet addButtonWithTitle:#"Camera"];
[popUpSheet addButtonWithTitle:#"Photo Library"];
[popUpSheet addButtonWithTitle:#"Camera Roll"];
[popUpSheet addButtonWithTitle:#"Cancel"];
popUpSheet.cancelButtonIndex = popUpSheet.numberOfButtons-1;
} else {
[popUpSheet addButtonWithTitle:#"Photo Library"];
[popUpSheet addButtonWithTitle:#"Camera Roll"];
[popUpSheet addButtonWithTitle:#"Cancel"];
popUpSheet.cancelButtonIndex = popUpSheet.numberOfButtons-1;
}
[popUpSheet showFromBarButtonItem: self.toolbarItems[0] animated:YES]; }
Everything has been delegated correctly from what I can tell:
DetailViewController.m
#interface DetailViewController () < UINavigationControllerDelegate, UIImagePickerControllerDelegate >
DetailViewController.h
#interface DetailViewController : UIViewController <UIActionSheetDelegate>
Any insight would be greatly appreciated and extremely helpful.
Your code looks correct. Try using the:
actionSheet:didDismissWithButtonIndex:
method. It's sent to the delegate after the animation ends. Hope it helps.
Finally figured out the problem. The compiler was giving me this warning because Apple recently combined UIActionsheet and UIAlert into one controller type called UIAlertController. Used the new UIAlertController and my problem was solved.
- (IBAction)addImage:(id)sender {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
UIAlertController *popUpSheet = [UIAlertController alertControllerWithTitle:nil message:#"Select your Choice" preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *photoLibrary = [UIAlertAction actionWithTitle:#"Photo Library" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:nil];
NSLog(#"Photo Library was touched");
[popUpSheet dismissViewControllerAnimated:YES completion: nil];
}];
UIAlertAction *recentPhotos = [UIAlertAction actionWithTitle:#"Camera Roll" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:picker animated:YES completion:nil];
NSLog(#"Camera Roll was touched");
[popUpSheet dismissViewControllerAnimated:YES completion: nil];
}];
UIAlertAction *camera = [UIAlertAction actionWithTitle:#"Camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:nil];
NSLog(#"Camera was touched");
[popUpSheet dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:#"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[popUpSheet dismissViewControllerAnimated:YES completion:nil];
}];
[popUpSheet addAction:photoLibrary];
[popUpSheet addAction:recentPhotos];
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
[popUpSheet addAction:camera];
}
[popUpSheet addAction:cancel];
[self presentViewController:popUpSheet animated:YES completion:nil];
}

Resources