我对这一行有一个问题
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:'找到方法
由于
答案 0 :(得分:2)
从您提供的代码中可以看出,UIImageView
的实例名为ball
。您确定您的班级被称为ball
(顺便说一下,班级名称应以大写字母开头)并且.h
- 文件是否包含在内?
一些背景信息:alloc
是一个类方法,你不会将它发送给一个实例 - 它的签名就像+ (id) alloc;
(注意这里的加号!)基本上,警告说你试图在你的对象上调用实例方法 alloc,如果它存在的话,它将具有签名- (id) alloc;
(请注意这里的减号!)(很可能不是这种情况)。因此,编译器不会将ball
识别为类名,而是将其视为UIImageView
的实例,如警告所示 - 可能不会响应- (id) alloc;
。
默认情况下,编译器假定未知方法返回id
的实例(而不是预期的ball
实例),这就是为什么它会警告您无法找到名为{{1的方法这个对象。