将'CGFloat'(又名'浮动')发送到参数不兼容类型'CGSize'(又名'struct CGSize')

时间:2014-03-17 06:02:28

标签: objective-c parameters struct

我正在使用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;
 }

1 个答案:

答案 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

编译器不知道kclassSemiSecretFont类(或子类) 方法

- (id) initWithSize:(CGFloat)fontsize;

理论上,它可以是NSTextContainer的实例,其具有方法

- (id)initWithSize:(CGSize)size; // designated initialiser

要解决这种歧义,您可以添加一个显式的强制转换:

font = [[(SemiSecretFont *)[klass alloc] initWithSize:size] autorelease];