Я пытаюсь поддерживать новые добавленные методы NSColor в 10.9 на старых системах. Pre-10.9 У меня были эти категории, которые позволяли мне унифицировать код между Mac и iOS. Теперь, когда у 10.9 есть эти методы, я получаю странный рисунок везде, где я их использую. Я хочу добавить эти методы динамически к более старым временам выполнения, и я нашел несколько ссылок, как это сделать, используя class_addMethod. Проблема в том, что, хотя addMethod возвращает успех, методы не вызываются.Добавление метода Objective-C в класс во время выполнения
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);
}
Любые указатели будут очень признательны.
Это выглядело настолько удивительно, что я не мог поверить, что не видел его в документах API, но также возвращал false на class_addMethod. – greg
Решенный: вышеописанное. Основная проблема заключалась в том, что литье двойного к CGFloat в float. – greg