2009-03-20 20 views
4

In meiner App habe ich einen UIImagePickerController. Wenn ein Bild ausgewählt ist, muss mein View-Controller das Bild abrufen und es an einen anderen View-Controller übergeben, der auf self.navigationController gespeichert wird. Aber ich bekomme immer SEGFAULTS oder keine Argumente und solche Dinge. Ich würde es schätzen, wenn Sie mir sagen, was mit diesem Code falsch ist:iPhone UIImagePickerController didFinishPickingImage: UMit der Übertragung zwischen View-Controllern umgehen?

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

Beide currentpicture definiert als UIImage haben *Aktuelles Bild;
ich jetzt sollte currentpicture als einige Daten haben, aber es stürzt jedes Mal ab! Ich habe viele verschiedene Dinge ausprobiert und ich kann das nicht herausfinden.

Antwort

6

korrigiert mich wenn ich falsch liege, aber UIImage entspricht nicht NSCopying , deshalb können Sie es nicht erfolgreich kopieren.

Was Sie wahrscheinlich tun möchten, ist das Bild zu behalten. Wenn self.currentpicture ist eine Eigenschaft 'behalten', wird automatisch das vorherige Objekt freigeben und die neuen behalten, so dass nur dies tun:

self.currentpicture = img; 

Ansonsten do it yourself:

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

In beide Fälle, in denen Sie [self.currentpicture release] noch aufrufen müssen, wenn Sie das Bild nicht mehr benötigen. Normalerweise würden Sie das in der Dealloc-Methode des "self" -Objekts tun.

-2

Eine Möglichkeit, Daten zwischen verschiedenen View-Controller-Klassen zu teilen, ist über den App-Delegaten.

Zum Beispiel Sie UIImage *currentPicture definiert in Sie AppDelegate haben könnten und Zugriff dann in beide Klasse-View-Controller wie folgt:

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