2015-08-27 3 views
0

Я пытаюсь передать UIImage из одного Viewcontroller в другой так же, как я прошел NSString, но в случае изображения он получает значение nil во втором контроллере. Я использовал imagepickercontroller для выберите изображение из галереи в первом контроллере. Это InfoViewcontroller.h-Передача UIImage из одного Viewcontroller в другой получает nil

#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]; 
} 

Почему я получаю ноль?

+0

Когда вы толкая на второй контроллер, убедитесь, что вы нажимаете после выбора изображения из палитры – Saif

+0

изображения вы можете объяснить? –

ответ

2

В здесь

- (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]; 
} 

Вы выполняете SEGUE с "ToCrop", где, как здесь проверка на toimage

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

Я думаю, что это должно быть if ([segue.identifier isEqualToString:@"tocrop"]), а также использовать self.image1=[[UIImage alloc]initWithData:data];

+1

OMG !! Я Слепой -_- .., потому что ты ... не нужен сам, хотя ... я уже синтезировал –

0

1 . Убедитесь, что образ1 не равен нулю после initWithData.

2.Check Если ViewDidLoad выполняться до destViewController.image2 = image1 (иногда это будет)

1

Мой друг ваши идентификаторы SEGUE не то же самое, и там для вашего кода внутри, если заявление в подготовке для segue не выполняется.

попробовать что-то вроде этого:

- (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;} 
} 

Приветствия