我正在尝试findByX
在通用Model
类中开发一组魔术方法,最终将使用NSPredicate
对象向 Core Data 发出查询:
(id)findByName;
(id)findByCreated;
...
根据先前 SO question的建议,我可以通过覆盖来拦截请求不存在方法的消息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'"
这是有道理的,因为该方法没有任何声明。那么,我在这里缺少什么?有没有最佳实践来实现这一点?
谢谢!