【问题标题】:iPhone UIImagePickerController didFinishPickingImage: UIImage transfer between view controllers?iPhone UIImagePickerController didFinishPickingImage:视图控制器之间的UIImage传输?
【发布时间】:2010-10-14 11:07:45
【问题描述】:

在我的应用程序中,我有一个 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];
}

它们都将 currentpicture 定义为 UIImage *currentpicture;
我现在应该将当前图片作为一些数据,但它每次都会崩溃!我尝试了很多不同的事情,但我无法弄清楚。

【问题讨论】:

    标签: iphone uiviewcontroller uiimage uiimagepickercontroller


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      如果我错了,请纠正我,但是 UIImage 不符合 NSCopying,因此您无法成功复制它。

      您可能想要做的是保留图像。如果 self.currentpicture 是一个 'retain' 属性,它会自动释放之前的对象并保留新的对象,所以这样做:

      self.currentpicture = img;
      

      否则自己做:

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

      在这两种情况下,当您不再需要图像时,您仍然需要调用 [self.currentpicture release]。通常你会在 'self' 对象的 dealloc 方法中这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-29
        • 2010-12-14
        • 1970-01-01
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多