将 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 如果ViewDidLoad在destViewController.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;}
}
干杯
我正在尝试将 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 如果ViewDidLoad在destViewController.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;}
}
干杯