Я пытаюсь разработать набор магических методов findByX
в общем классе Model
, который в конечном итоге будет выполнять запросы к Core Data с использованием объектов NSPredicate
:
(id)findByName;
(id)findByCreated;
...
Следуя совету из предыдущего вопроса SO, я могу перехватывать сообщения, запрашивающие несуществующие методы, переопределяя resolveInstanceMethod
:
#include <objc/runtime.h>
+ (BOOL) resolveInstanceMethod:(SEL)aSel {
if (aSel == @selector(resolveThisMethodDynamically)) {
class_addMethod([self class], aSel, (IMP) dynamicMethodIMP, "v@:");
return YES;
}
return [super resolveInstanceMethod:aSel];
}
void dynamicMethodIMP(id self, SEL _cmd) {
NSLog(@"Voilà");
}
Однако, когда я пытаюсь использовать [myObject resolveThisMethodDynamically]
, компилятор выдает следующую ошибку:
"No visible @interface for 'MyModel' declares the selector 'resolveThisMethodDynamically'"
что имеет смысл, так как нет никакого объявления этого метода. Итак, что мне здесь не хватает? Есть ли лучшая практика для этого?
Спасибо!