UIImage作为参数:发送到实例的无法识别的选择器

时间:2012-01-04 12:39:17

标签: ios4 uiimage xcode4.2

下面的代码是用户使用相机拍照/或从库中选取照片后运行的图像选择器回调。

有人可以向我解释为什么第一个版本有效并且第二个版本会抛出错误吗?

第一个版本将UIImage从合成的UIImageView传递给方法scaleAndRotateImage。

第二个版本声明了一个本地UIImageView并将图像传递给方法scaleAndRotateImage。

这是第一个有效的版本::

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];

VC_Create_Preview *vc_create_preview =  [[VC_Create_Preview alloc] initWithNibName:@"VC_Create_Preview" bundle:nil];

//UIImageView *temp = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
//temp.image = [self scaleAndRotateImage:temp.image];
//vc_create_preview.origImage = temp;

srcImageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
srcImageView.image = [self scaleAndRotateImage:srcImageView.image];
vc_create_preview.origImage = srcImageView;

[self.navigationController pushViewController:vc_create_preview animated:YES];

}

但是下面的第二个版本没有,并在调用方法scaleAndRotateImage时抛出一个错误(在调试中注意我甚至不能“进入”scaleAndRotateImage)

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];

VC_Create_Preview *vc_create_preview =  [[VC_Create_Preview alloc] initWithNibName:@"VC_Create_Preview" bundle:nil];

UIImageView *temp = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
temp.image = [self scaleAndRotateImage:temp.image];
vc_create_preview.origImage = temp;

//srcImageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
//srcImageView.image = [self scaleAndRotateImage:srcImageView.image];
//vc_create_preview.origImage = srcImageView;

[self.navigationController pushViewController:vc_create_preview animated:YES];

}

第二个版本引发的错误是

Pending breakpoint 1 - ""VC_Create_Capture.m":97" resolved
2012-01-04 20:33:52.674 MultiInterfaceTest[430:f803] -[UIImage image]: unrecognized     selector sent to instance 0x68aac00
2012-01-04 20:33:52.717 MultiInterfaceTest[430:f803] *** Terminating app due to uncaught    exception 'NSInvalidArgumentException', reason: '-[UIImage image]: unrecognized selector     sent to instance 0x68aac00'
*** First throw call stack:
(0x13c2052 0x1553d0a 0x13c3ced 0x1328f00 0x1328ce2 0x35df 0x211c52 0xbfaa305 0xbfbe5fd     0xc022fef 0x2dde39 0x2dd143 0x2de3cf 0x2e0a31 0x2e098c 0x2d93e7 0x41812 0x41ba2 0x28384 0x1baa9 0x12acfa9 0x13961c5 0x12fb022 0x12f990a 0x12f8db4 0x12f8ccb 0x12ab879 0x12ab93e 0x19a9b 0x23b8 0x2315)
terminate called throwing an exceptionCurrent language:  auto; currently objective-c

3 个答案:

答案 0 :(得分:0)

“ - [UIImage image]:无法识别的选择器发送到实例0x68aac00”

似乎在UIImage对象上调用[UIImageView图像]访问器方法。很可能是内存管理错误:UIImageView被取消分配,并且其内存充满了UIImage实例,这是错误的。 (不相关:你也是在第一种方法中泄漏内存。-pushViewController:animated:保留视图控制器,所以你必须 - 释放它。

答案 1 :(得分:0)

这是因为您在UIImage类上调用了图像API。 image是UIImageView类的一种方法而不是UIImage。这就是为什么Xcode会抛出这个错误。

要解决此问题,请确保您正在通话 因此,请确保您在UIImage View类上调用图像API而不是UIImage。检查您在.h文件中声明的所有变量,并确保已使用UIImageView类而不是UIImage。

未识别选择器意味着您的类不支持您在代码中调用的任何图像API。

答案 2 :(得分:0)

抱歉,我找到了答案。 以下是错误的,因为[info objectForKey ....]返回UIImage,而不是UIImageView。 因此可能不会创建temp,因此代码的第二行会产生错误。

UIImageView *temp = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
temp.image = [self scaleAndRotateImage:temp.image];
vc_create_preview.origImage = temp;

谢谢大家!