我正在使用xcode 5的最新版本。
我在以下代码中遇到此错误两次:
+ (SemiSecretFont *)fontWithName:(NSString *)name
size:(CGFloat) size;
{
//dynamically search for a class with this name
Class klass = NSClassFromString([NSString stringWithFormat:@"%@Font", name]);
//NSLog(@"looking for font: %@", name);
// NSLog(@"klass: %@", klass);
SemiSecretFont * font = nil;
if (klass)
font = [[[klass alloc] initWithSize:size] autorelease]; //error occurs here
return font;
}
- (id) fontWithSize:(CGFloat)s
{
Class klass = [self class];
SemiSecretFont * f = nil;
f = [[[klass alloc] initWithSize:s] autorelease]; //error occurs here again
return f;
}
错误:将'CGFloat'(又名'浮动')发送到参数不兼容类型'CGSize'(又名'struct CGSize')
我也收到警告:名为'initWithSize:'的多个方法找到了
更新
这是我的initWithSize声明代码......
//this is not meant to be instantiated directly!
- (id) initWithSize:(CGFloat)fontsize
{
if ((self = [super init])) {
size = fontsize;
font = nil;
}
return self;
}
答案 0 :(得分:3)
这似乎来自https://github.com/ericjohnson/canabalt-ios和
+ (SemiSecretFont *)fontWithName:(NSString *)name size:(CGFloat) size;
似乎是一个工厂方法,它返回SemiSecretFont
或其他实例
子类。但是在编译时
font = [[[klass alloc] initWithSize:size] autorelease]; //error occurs here
编译器不知道kclass
是SemiSecretFont
类(或子类)
方法
- (id) initWithSize:(CGFloat)fontsize;
理论上,它可以是NSTextContainer
的实例,其具有方法
- (id)initWithSize:(CGSize)size; // designated initialiser
要解决这种歧义,您可以添加一个显式的强制转换:
font = [[(SemiSecretFont *)[klass alloc] initWithSize:size] autorelease];