Frage

In meiner app habe ich einen UIImagePickerController. Wenn ein Bild ausgewählt wird, muss meine Ansicht Controller das Bild bekommen und es an einem anderen View-Controller übergeben, die auf self.navigationController geschoben wird. Aber ich bin immer segfaults oder null Argumente bekommen, und solche Dinge. Ich würde es begrüßen, wenn Sie sagen könnte mir, was mit diesem Code falsch ist:

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

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

War es hilfreich?

Lösung

korrigiert mich wenn ich falsch liege, aber UIImage entspricht nicht NSCopying, deshalb kann man nicht erfolgreich kopieren.

Was möchten Sie wahrscheinlich zu tun ist, um das Bild zu halten. Wenn self.currentpicture a ‚behalten‘ Eigenschaft ist, wird es automatisch das vorherige Objekt freigeben und die neuen behalten, so dass dies nur tun:

self.currentpicture = img;

Ansonsten do it yourself:

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

In beiden Fällen müssen Sie noch rufen müssen [self.currentpicture Release], wenn Sie nicht mehr benötigen, um das Bild. Normalerweise würden Sie das tun in der ‚Selbst‘ Objekt dealloc Methode.

Andere Tipps

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

Zum Beispiel könnten Sie UIImage *currentPicture in Sie app-Delegaten definiert haben und Zugriff dann in Ihre beiden View-Controller-Klasse wie folgt:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication]delegate];
UIImage *i = [appDelegate.currentPicture];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top