我正在尝试使用resolveClassMethod:
和object_addMethod
添加新方法。事情似乎总体上运作良好,但参数似乎没有通过。
当我传入参数时,例如:
UIFont *font1 = [UIFont academyEngravedLetPlainOfSize:12.0f];
我的动态方法中的字体大小为0.0而不是12.0。以下是以下示例的输出:
createNamedFontIMP(UIFont, academyEngravedLetPlainOfSize:, 0.000000)
我在这里做错了什么?
@interface UIFont (NTNamedFonts)
+(UIFont *)academyEngravedLetPlainOfSize:(int)size NS_AVAILABLE_IOS(6_0);
@end
@implementation UIFont (NTNamedFonts)
NSString *targetSelectorName = @"academyEngravedLetPlainOfSize:";
NSString *targetFontName = @"AcademyEngravedLetPlain";
+(BOOL)resolveClassMethod:(SEL)sel
{
NSString *selectorName = NSStringFromSelector(sel);
if ( [selectorName isEqualToString:targetSelectorName] )
{
Class metaClass = object_getClass(self);
class_addMethod(metaClass, sel, (IMP)createNamedFontIMP, "@#:f");
return YES;
}
else
return [super resolveClassMethod:sel];
}
static id createNamedFontIMP(Class class, SEL _cmd, CGFloat size)
{
NSLog(@"createNamedFontIMP(%@, %@, %f)", NSStringFromClass(class), NSStringFromSelector(_cmd), size);
UIFont *font = [class fontWithName:targetFontName size:size];
return font;
}
@end
答案 0 :(得分:0)
将整数传递给float。请显示方法声明。
BTW:你的代码是什么原因?一个类别似乎是更好的方法。BTW 2:如果我没记错的话,你必须使用双倍。