UIImage as Parameter: нераспознанный селектор отправлен на экземпляр - PullRequest
1 голос
/ 04 января 2012

Код ниже - это обратный вызов средства выбора изображений, который запускается после того, как пользователь делает фотографию с помощью камеры / или выбирает фотографию из библиотеки.

Может кто-нибудь объяснить мне, почему первая версия работает, а вторая выдает ошибку?

Первая версия передает 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];

}

Но 2-я версия ниже этого не делает и выдает ошибку при вызове метода 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];

}

Ошибка 2-й версии:

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 голосов
/ 04 января 2012

Это потому, что в некоторых случаях вы вызывали API изображений в UIImage Class.image это метод класса UIImageView, а не UIImage.Вот почему XCode выдает эту ошибку.

Чтобы устранить ее, убедитесь, что вы звоните. Поэтому, пожалуйста, убедитесь, что вы вызываете API изображений в классе UIImage View, а не в UIImage.Проверьте все переменные, которые вы объявили в своем файле .h, и убедитесь, что вы использовали класс UIImageView вместо UIImage.

Неизвестный селектор означает, что ваш класс не поддерживает API-интерфейсы изображений, которые вы вызывали в своем коде.

0 голосов
/ 05 января 2012

Извините, ребята, я нашел ответ.Следующее неверно, поскольку [info objectForKey ....] возвращает UIImage, а не UIImageView.Следовательно, вероятно, что temp, вероятно, не был создан, поэтому возникла ошибка из 2-й строки кода.

0 голосов
/ 04 января 2012

"- [UIImage image]: нераспознанный селектор отправлен на экземпляр 0x68aac00"

Кажется, что метод доступа [UIImageView image] вызывается для объекта UIImage. Скорее всего, это ошибка управления памятью: UIImageView освобождается, а его память заполняется экземпляром UIImage по ошибке. (Не связано: вы также теряете память при первом подходе.

...