0

我有一个通过 UIStoryboardPopoverSegue 调用的视图控制器,里面有一个调用 imagePickerController 的按钮,第一次调用没问题,但第二次崩溃了。

代码在不通过 UIStoryboardPopoverSegue 时使用是可以的。

   -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
    UIImageWriteToSavedPhotosAlbum (image, nil, nil , nil);
    [self dismissViewControllerAnimated:YES completion:nil];

}
-(IBAction)takephoto:(id)sender
{
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        self.imagePicker.delegate=self;
        self.imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;

        [self presentViewController:imagePicker animated:YES completion:nil];
    }

}

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (!self.imagePicker)
    {
        self.imagePicker = [[UIImagePickerController alloc] init];
    }
}

我启用了 NSZobmbie 来显示任何可以帮助我跟踪它的日志。

* -[UIImagePickerController isKindOfClass:]:消息发送到释放的实例 0x1eb3b700

4

1 回答 1

1

您的 UIImagePickerController 被释放,然后尝试稍后访问 - 所以崩溃了!

要修复它,请将 UIImagePickerController 设置为拥有实例的强引用属性:

@property (strong, nonatomic) UIImagePickerController *imagePicker;

初始化一次:

if (!self.imagePicker) self.imagePicker = [[UIImagePickerController alloc] init];

并使用:

[self.imagePicker doStuff]

访问。

那应该解决它。

编辑

if ([[segue identifier]isEqualToString:@"tcwindshield"]) { 
   self.ips = [segue destinationViewController]; 
   self.ips.delegate = self
   self.ips.strStatValue=@"WindShield"; 
}
于 2013-07-26T14:55:58.827 回答