4

Dans mon application, j'ai un UIImagePickerController. Quand une image est sélectionnée, mon contrôleur de vue doit obtenir l'image et la transmettre à un autre contrôleur de vue, qui est poussé sur self.navigationController. Mais je reçois toujours SEGFAULTS ou des arguments nuls, et des choses comme ça. Je vous serais reconnaissant si vous pouviez me dire ce qui ne va pas avec ce code:iPhone UIImagePickerController didFinishPickingImage: Transfert UIImage entre les contrôleurs de vue?

FirstViewController.m:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo { 
self.currentpicture = [img copy]; 
[self dismissModalViewControllerAnimated:YES]; 
[self goNext]; 
} 
-(void)goNext{ 
SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"Second" bundle:nil]; 
[vc giveMePicture:currentpicture]; 
[self.navigationController pushViewController:vc animated:YES]; 
} 

SecondViewController.m:

-(void)giveMePicture:(UIImage *)data { 
self.currentpicture=[data copy]; 
} 

Ils ont tous deux currentpicture défini comme UIImage * currentpicture;
Je maintenant devrait avoir currentpicture comme certaines données, mais il se bloque à chaque fois! J'ai essayé beaucoup de choses différentes et je ne peux pas comprendre cela.

Répondre

6

-moi si je me trompe, mais UIImage ne sont pas conformes à NSCopying Par conséquent, vous ne pouvez pas le copier correctement.

Ce que vous voulez probablement faire est de conserver l'image. Si self.currentpicture est un « conserver » la propriété, il libérera automatiquement l'objet précédent et de conserver la nouvelle, alors faites ceci:

self.currentpicture = img; 

Sinon faire vous-même:

[self.currentpicture release]; 
self.currentpicture = [img retain]; 

Dans les deux cas, vous devez toujours appeler [self.currentpicture] lorsque vous n'avez plus besoin de l'image. Habituellement, vous le feriez dans la méthode dealloc de l'objet 'self'.

-2

L'un des moyens de partager des données entre différentes classes de contrôleurs de vue est le délégué de l'application.

Par exemple, vous pourriez avoir UIImage *currentPicture défini dans vous déléguez l'application et l'accès alors à la fois de votre vue classe contrôleur comme suit:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication]delegate]; 
UIImage *i = [appDelegate.currentPicture]; 
Questions connexes