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.

È stato utile?

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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top