iPhone: «имя_класса» может не отвечать на метаданные »и« нераспознанный селектор »ошибки - PullRequest
0 голосов
/ 03 марта 2010

Я написал приложение, в котором хочу преобразовать изображение .jpg в формат .bmp, но у меня не получается с ошибкой:

class_name 'может не отвечать на methd_name».

Мой код следующий:

#import "CalculateRGBViewController.h"

@implementation CalculateRGBViewController

@synthesize skinImage;
@synthesize lblRedColor,btn,img;
struct pixel {
    unsigned char r, g, b,a;
};


-(IBAction)btnClick:(id) sender{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentModalViewController:picker animated:YES];

}
-(void)imagePickerController:(UIImagePickerController *) picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    [picker dismissModalViewControllerAnimated:YES];
    skinImage.  image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

}

+(void)calculateRGB:(UIImage *)skinImage    {

    struct pixel *pixels = (struct pixel *) calloc(1, skinImage.size.width * skinImage.size.height * sizeof(struct pixel));
    if (pixels != nil)
    {
        // Create a new bitmap

        CGContextRef context = CGBitmapContextCreate(
                                                     (void*) pixels,
                                                     skinImage.size.width,
                                                     skinImage.size.height,
                                                     8,
                                                     skinImage.size.width * 4,
                                                     CGImageGetColorSpace(skinImage.CGImage),
                                                     kCGImageAlphaPremultipliedLast
                                                     );
    NSLog( @"Pixel data one red (%i)", context);        
}

}
-(IBAction)btnCalRGB:(id) sender
{
    [self calculateRGB];

}

The shown me following code. 
-(IBAction)btnCalRGB:(id) sender
{
    [self calculateRGB];


}

Предупреждение: CalculateRGBController может не реагировать на calcRGB в функции кнопки btnCalRGB.

Edit01:

Я также реализовал в своем коде, но он снова показывает то же предупреждение.

[self calculateRGB:anUIImage]; 
-(IBAction)btnCalRGB:(id) sender; 

но это снова показывает то же самое предупреждение. Когда кнопка выше нажата, программа выдает и исключение.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[UIImage skinImage]: unrecognized selector sent to

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Вы называете метод неправильно. Вы должны называть это так;

[self calculateRGB:anUIImage];

Ваш метод принимает UIImage в качестве аргумента, поэтому вы должны отправить его при вызове метода. Вы также должны добавить

+(void)calculateRGB:(UIImage *)skinImage;

в ваш .h файл

Используйте это

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 

вместо этого

-(void)imagePickerController:(UIImagePickerController *) picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

и вы можете написать

skinImage.image = image;
0 голосов
/ 03 марта 2010

Прежде всего, чтобы избавиться от ошибки:

+(void)calculateRGB:(UIImage *)skinImage

Должно быть

- (void)calculateRGB:(UIImage *)skinImage

+ предназначен для класса методов, вы собираетесь вызвать его на экземплярах (это нам нужно использовать -) Так что ошибка в том, что вы пытаетесь вызвать метод экземпляра, но нет метода экземпляра с именем calculateRGB:.

Метод хочет, чтобы UIImage сделал свой расчет. Это означает, что вы должны позвонить (как уже говорила EEE):

[self calculateRGB:anImage];

anImage будет UIImage экземпляром, который вы предоставляете. Это может быть skinImage, который вы уже используете в реализации, как показано в вашем коде.

Кроме этого, я бы рекомендовал , а не , чтобы использовать подкласс UIViewController для таких вещей, как вычисление значений RGB изображения. Для этого вам, вероятно, следует использовать категорию UIImage.

...