-1

I read much posts about this question but I don't found any answers.. so, I want to pass from my "ViewController" to my "SecondViewController" an image picked from ImagePicker, this is what I tried:

In my ViewController:

 -(IBAction)Scatta:(id)sender {

        UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
        {
            [imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
        }

        // image picker needs a delegate
        [imagePickerController setDelegate:self];

        // Place image picker on the screen
        [self presentViewController:imagePickerController animated:YES completion:nil];   

        // Create main view controller
        Main_VCViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"Main"];
        // Go to main
        [self presentModalViewController:VC animated:YES];  
}

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

       [self dismissViewControllerAnimated:YES completion:^{

          UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
          Main_VCViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"Main"];
          VC.ImmaginePresa = image;
       [self presentModalViewController:VC animated:YES];

    }]; 
}

and this is my SecondViewController :

-(void)viewDidAppear:(BOOL)animated {
    UIImage *imm = _ImmaginePresa;
    [_Image setImage: imm];
}

I set a default image in my SecondVC and when I launch the app I press the "Scatta" button and when it opens my SecondVC it shows me for 0.5/1 second my default image, and after that, it shows nothing. I tried to pass in the same way some strings and it works correctly.

EDIT1

ViewController:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
   UIImage *img = [info objectForKey:UIImagePickerControllerOriginalImage];


     //Instanzio il viewController della main
   Main_VCViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"Main"];

    NSData *imageData = UIImagePNGRepresentation(img.images);
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:imageData] forKey:@"ImageData"];

    VC.ImmaginePresa = img;

    [self dismissModalViewControllerAnimated:YES];
     //Vado alla main
   [self presentModalViewController:VC animated:YES];

}

SecondVC:

-(void)viewDidAppear:(BOOL)animated {
    NSData* myEncodedImageData =[[NSUserDefaults  standardUserDefaults]objectForKey:@"ImageData"];
    UIImage* image = [UIImage imageWithData:myEncodedImageData];
    [_Image setImage: image];
}

It still doesn't work, same result

EDIT2

With @SaurabhPrajapati 's solution it seems like the image is nil, because when i click on my image it doesn't do anything is it possible?

Jack_usti
  • 99
  • 1
  • 11

1 Answers1

2

I assume that you are getting image in "didFinishPickingMediaWithInfo". so here is my suggestion

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

UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
if(image != nil)
{
      [self dismissViewControllerAnimated:YES completion:^{

       //define ImmaginePresa as NSData in Main_VCViewController
       Main_VCViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"Main"];
       VC.ImmaginePresa = UIImagePNGRepresentation(image);
       [self presentModalViewController:VC animated:YES];
}]; 
}

}

and in Main_VCViewController you can get image like ,

UIImage *img = [UIImage imageWithData:self.ImmaginePresa];
Saurabh Prajapati
  • 2,348
  • 1
  • 24
  • 42