将 UIImage 从一个 Viewcontroller 传递给另一个得到 nil

Passing UIImage from one Viewcontroller to other gets nil

我正在尝试将 UIImage 从一个 Viewcontroller 传递到另一个 Viewcontroller 以与我传递 NSString 相同的方式但是在图像的情况下它在第二个 controller.I 中获得零值已使用 imagepickercontroller select 来自第一个控制器图库的图像。 这是InfoViewcontroller.h-

#import <UIKit/UIKit.h>

@interface InfoViewController : UIViewController

@property(strong,nonatomic) UIImagePickerController *imagepicker;
@property(strong,nonatomic) UIImage *image1;

@end

这是InfoViewcontroller.m-

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

NSData *data=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"], 1);
image1=[[UIImage alloc]initWithData:data];
//[imgview1 setImage:image1];
[imagepicker dismissViewControllerAnimated:YES completion:nil];
[self performSegueWithIdentifier:@"tocrop" sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

if ([segue.identifier isEqualToString:@"toimage"]) {

ThirdViewController *destViewController = segue.destinationViewController;
destViewController.image2 =image1;}
}

这是ThirdViewController.h-

#import <UIKit/UIKit.h>

@interface ThirdViewController : UIViewController
@property (strong, nonatomic)  IBOutlet UIImageView *imgview2;
@property (strong,nonatomic) UIImage *image2;
@end

这是ThirdViewController.m-

-(void)viewDidLoad {
[super viewDidLoad];
//if(image2==nil) NSLog(@"abab");
[imgview2 setImage:image2];
}

为什么我得到的是零?

在这里

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

NSData *data=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"], 1);
image1=[[UIImage alloc]initWithData:data];
//[imgview1 setImage:image1];
[imagepicker dismissViewControllerAnimated:YES completion:nil];
[self performSegueWithIdentifier:@"tocrop" sender:self];
}

您正在使用 "ToCrop" 执行 segue,在这里您检查 toimage

if ([segue.identifier isEqualToString:@"toimage"]) 

我觉得应该是if ([segue.identifier isEqualToString:@"tocrop"]) 也用self.image1=[[UIImage alloc]initWithData:data];

1.Make 确保 image1 在 initWithData 后不为 nil。

2.Check 如果ViewDidLoaddestViewController.image2 =image1之前执行(有时会)

我的朋友,你的 segue 标识符不一样,你的代码在准备 segue 的 if 语句中没有被执行。

尝试这样的事情:

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

    NSData *data=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"], 1);
    image1=[[UIImage alloc]initWithData:data];
    //[imgview1 setImage:image1];
    [imagepicker dismissViewControllerAnimated:YES completion:nil];
    [self performSegueWithIdentifier:@"tocrop" sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if ([segue.identifier isEqualToString:@"tocrop"]) {

        ThirdViewController *destViewController = segue.destinationViewController;
        destViewController.image2 =image1;}
}

干杯