проблема инициализации пользовательского класса (UIImageView может не отвечать на '-alloc') - PullRequest
1 голос
/ 16 февраля 2011

У меня есть проблема для этой строки

ball* balle = [[ball alloc] initWithPNGFileName:ballPath andGame:game andCGRect:CGRectMake( 200, 100, 16, 16 )] ;

проблема в том, что «шарик не объявлен» с предупреждением: «UIImageView» может не отвечать на «-alloc» и предупреждение: нет «-initWithPNGFileName: andGame: andCGRect:» найден метод

Вот метод:

-(id) initWithPNGFileName:(NSString *) filename andGame: (Game*) game andCGRect: (CGRect) imagerect_ {  
    [super init];

    CGDataProviderRef provider;
    CFStringRef path;
    CFURLRef url;


    const char *filenameAsChar = [filename cStringUsingEncoding:[NSString defaultCStringEncoding]]; //CFStringCreateWithCString n'accepte pas de NSString

    path = CFStringCreateWithCString (NULL, filenameAsChar, kCFStringEncodingUTF8);
    url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, NO);
    CFRelease(path);
    provider = CGDataProviderCreateWithURL (url);
    CFRelease (url);
    image = CGImageCreateWithPNGDataProvider (provider, NULL, true, kCGRenderingIntentDefault);

    CGDataProviderRelease (provider);

    imageRect = imagerect_ ;

    [game addToDraw: self] ;
    [game addToTimer : self] ;

    return self ;

}


-(void) draw: (CGContextRef) gc
{
    CGContextDrawImage (gc, imageRect, image );
}

Я не понимаю, почему нельзя выделить UIImageView и почему у меня нет метода '-initWithPNGFileName: andGame: andCGRect:'

Спасибо

1 Ответ

2 голосов
/ 17 февраля 2011

Из предоставленного вами кода кажется, что у вас есть экземпляр UIImageView с именем ball. Вы уверены, что ваш класс называется ball (кстати, имена классов должны начинаться с заглавной буквы), и он .h - файл правильно включен?

Некоторая справочная информация: alloc - это метод класса, вы не отправляете его экземпляру - его сигнатура похожа на + (id) alloc; (обратите внимание на плюс!) В основном, в предупреждении говорится, что вы пытаетесь вызвать метод экземпляра alloc для вашего объекта, который будет иметь подпись - (id) alloc; (не обращайте внимания на минус!), если он существует (что, скорее всего, не так). Следовательно, компилятор распознает ball не как имя класса, а как экземпляр UIImageView, который, как указывает предупреждение, может не отвечать на - (id) alloc;. По умолчанию компилятор предполагает, что неизвестные методы возвращают экземпляр id (а не ball, как вы ожидали), поэтому он предупреждает вас, что не может найти метод с именем -initWithPNGFileName:andGame:andCGRect для этого объекта.

...