iPhone UIImagePickerController didFinishPickingImage:UIImage trasferimento view controller?
-
21-08-2019 - |
Domanda
Nella mia applicazione, ho un UIImagePickerController.Quando una immagine è selezionata, il mio punto di vista controllore ha bisogno di ottenere l'immagine e la passa a un altro controller di visualizzazione, che è spinta su di sé.navigationController.Ma io sono sempre segmentation fault o nulla argomenti, e cose del genere.Le sarei grato se poteste dirmi cosa c'è di sbagliato con questo codice:
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];
}
Entrambi hanno currentpicture definito come un UIImage *currentpicture;
Io ora dovrebbe sono currentpicture un certo numero di dati, ma si blocca ogni volta!Ho provato molte cose diverse e non riesco a capire questo fuori.
Soluzione
Mi corregga se sbaglio, ma UIImage non conforme alle NSCopying, quindi non riesci a copiarlo.
Probabilmente quello di cui voglio fare è mantenere l'immagine.Se auto.currentpicture è un 'mantenere' la struttura, si rilascia automaticamente l'oggetto precedente e mantenere uno nuovo, quindi basta fare questo:
self.currentpicture = img;
Altrimenti fai da te:
[self.currentpicture release];
self.currentpicture = [img retain];
In entrambi i casi si devono ancora chiamare [self.currentpicture release] quando non è più necessario l'immagine.Di solito si fa in 'sé' oggetto dealloc metodo.
Altri suggerimenti
Un modo per condividere i dati tra i diversi controller di visualizzazione classi attraverso l'app delegato.
Per esempio, si potrebbe avere UIImage *currentPicture
definito in voi app delegato e quindi l'accesso in entrambi i controller di visualizzazione di classe come segue:
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication]delegate];
UIImage *i = [appDelegate.currentPicture];