【发布时间】:2013-12-23 01:16:08
【问题描述】:
我正在尝试在旧系统上支持 10.9 中新添加的 NSColor 方法。在 10.9 之前,我将这些放在一个允许我在 Mac 和 iOS 之间统一代码的类别中。现在 10.9 有这些方法,无论我在哪里使用它们,我都会得到奇怪的绘图。我想将这些方法动态地添加到较旧的运行时中,并且我找到了一些关于如何使用 class_addMethod 进行操作的参考资料。问题是,即使 addMethod 返回成功,也不会调用方法。
NSColor *
fColorWithWhite(id self, SEL _cmd, float white, float alpha) {
return [NSColor colorWithDeviceWhite: white
alpha: alpha];
}
NSColor *
fColorWithRedGreenBlue(id self, SEL _cmd, float red, float green, float blue, float alpha) {
return [NSColor colorWithDeviceRed: red
green: green
blue: blue
alpha: alpha];
}
+ (void)addLegacySupport {
Class class = NSClassFromString(@"NSColor");
BOOL success = class_addMethod(class, @selector(colorWithWhite:alpha:), (IMP)fColorWithWhite, "@@:ff");
NSLog(@"colorWithWhite:alpha: - %i", success);
success = class_addMethod(class, @selector(colorWithRed:green:blue:alpha:), (IMP)fColorWithRedGreenBlue, "@@:ffff");
NSLog(@"colorWithRed:green:blue:alpha: - %i", success);
}
任何指针将不胜感激。
【问题讨论】:
标签: objective-c