iPhone UIImagePickerController didFinishPickingImage: UIImage在视图控制器之间的传递?

4
在我的应用程序中,我有一个UIImagePickerController。当选择图像时,我的视图控制器需要获取图像并将其传递给另一个被推入到self.navigationController的视图控制器。但我总是得到SEGFAULTS或nil参数等问题。如果您能告诉我这段代码有什么问题,我会很感激:
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];
}

他们都定义了一个UIImage *currentpicture作为当前图片;
现在我应该有一些数据作为currentpicture,但每次都会崩溃!我尝试了许多不同的方法,但是无法解决这个问题。

2个回答

6

请纠正我如有错误,但UIImage不符合NSCopying协议,因此您无法成功复制它。

您可能希望做的是保留图像。如果self.currentpicture是“保留”属性,则会自动释放以前的对象并保留新对象,因此只需这样做:

self.currentpicture = img;

否则自己动手:
[self.currentpicture release];
self.currentpicture = [img retain];

在这两种情况下,当你不再需要该图片时,你仍然需要调用 [self.currentpicture release]。通常情况下,你会在 'self' 对象的 dealloc 方法中完成该操作。

-2

在不同的视图控制器类之间共享数据的一种方法是通过应用程序委托。

例如,您可以在应用程序委托中定义UIImage *currentPicture,然后在两个视图控制器类中访问它,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接