0

I've not seen these two issues compounded together, so I figured I'd ask.

PhotoViewController

-(void)viewDidAppear:(BOOL)animated
{

    UIImagePickerController *picker = [[UIImagePickerController alloc]init];
    picker.delegate = self;

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    }
    else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]){
        picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    }

    [self presentViewController:picker animated:YES completion:NULL];

}


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

    UIImage *image = info[UIImagePickerControllerEditedImage];
    if(!image) image = info[UIImagePickerControllerOriginalImage];

    picker.delegate = self;

    [self setPhotoForNextVC:image];

    [self dismissViewControllerAnimated:YES completion:nil];
    [self performSegueWithIdentifier:@"givePhotoToGiveDetailsSegue" sender:self];

}


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}

Selecting a photo works, but when I press cancel the UIImagePickerController keeps coming back up, and I get the error:

Presenting view controllers on detached view controllers is discouraged <UINavigationController: 0x10b38b560>.
rmaddy
  • 314,917
  • 42
  • 532
  • 579
jaja
  • 127
  • 10
  • possible duplicate of [Warning :-Presenting view controllers on detached view controllers is discouraged](http://stackoverflow.com/questions/19890761/warning-presenting-view-controllers-on-detached-view-controllers-is-discourage) – DogCoffee Jun 13 '14 at 21:15

2 Answers2

0

I had faced this problem before as well.

For me it turned out to be that, especially in ViewDidAppear. The OS doesn't like to put up new controllers right after another appears.

Make another method that handles this.

(void)bringUpCameraController {

UIImagePickerController *picker = [[UIImagePickerController alloc]init]; picker.delegate = self;

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]){
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
}

[self presentViewController:picker animated:YES completion:NULL];

} My workaround :[self performSelector:<(bringUpCameraController)> withObject:<(nil)> afterDelay:<(2.0)>]

this will get rid of the message.

benzino
  • 46
  • 4
  • so you write the bring up camera method than perform the last piece of code (self perform selector) within viewDidAppear? – jaja Jun 13 '14 at 23:39
  • yes, in viewdidAppear . Like so -(void)viewDidAppear { [self performSelector :showCamera withDelay:2.0]; – benzino Jun 16 '14 at 21:04
0

Look up the tree to PhotoViewController's hierarchy. It's probably not the root. I had this happen. The error message is literal.

Stephen J
  • 2,367
  • 2
  • 25
  • 31