Я пытаюсь переопределить метод UIColor
isEqual:
. Я делаю это внутри метода категории, однако он, похоже, не вызван, либо из NSArray
containsObject:
, либо даже при вызове напрямую, как показано ниже.Заменить UIColor's isEqual: метод в категории
Он был показан как метод в заголовочном файле категории, и я также проверил, что категория была импортирована в файл реализации, над которым я работаю.
где она вызывается непосредственно:
UIColor *col = [UIColor eightBitColorWithRed:pxl.red green:pxl.green blue:pxl.blue];
int index = -1;
for (int i = 0; i < self.colorArrayM.count; i++) {
if ([col isEqual:((UIColor*)self.colorArrayM[i])]) {
index = i;
break;
}
}
И категория методы:
-(BOOL) isEqual:(id)otherColor {
if (otherColor == self)
return YES;
if (!otherColor || ![otherColor isKindOfClass:[self class]])
return NO;
return [self isEqualToColor:otherColor];
}
-(BOOL) isEqualToColor:(UIColor*)otherColor {
if (self == otherColor)
return YES;
unsigned char r0, r1, g0, g1, b0, b1;
[self eightBitRed:&r0 green:&g0 blue:&b0];
[otherColor eightBitRed:&r1 green:&g1 blue:&b1];
return r0 == r1 && g0 == g1 && b0 == b1;
}
Пробужденный swizzling, и он _seemed_ для переключения реализаций, то есть 'method_exchangeImplementations (originalMethod, swizzledMethod)' был вызван, однако при вызове 'isEqual:' на цвет никаких журналов из моего пользовательского метода не было напечатано и не было остановлено на любые точки останова ... (не уверен, что swizzling испортит это?). В итоге я добавил категорию в NSArray для 'containsColor:' и 'indexOfColor:', которая вызывает мой пользовательский метод из моей категории UIColor. –