Objective c 如何在Objective C中创建神奇的方法
我正在尝试在一个通用的Objective c 如何在Objective C中创建神奇的方法,objective-c,core-data,magic-methods,Objective C,Core Data,Magic Methods,我正在尝试在一个通用的模型类中开发一组神奇的findByX方法,最终将使用NSPredicate对象向核心数据发出查询: (id)findByName (id)findByCreated … 根据a的建议,我可以通过重写resolveInstanceMethod,截获请求不存在方法的消息: #include <objc/runtime.h> + (BOOL) resolveInstanceMethod:(SEL)aSel { if (aSel == @selector(re
模型
类中开发一组神奇的findByX
方法,最终将使用NSPredicate
对象向核心数据发出查询:
(id)findByName代码>
(id)findByCreated代码>
…
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à");
}
这是有道理的,因为这个方法没有任何声明。那么,我错过了什么?是否有实现这一目标的最佳实践
谢谢大家! 我不确定这是否正是您想要的,但这里有一些关于这种核心数据功能的有用资源:
希望这有帮助 这让我很好奇,所以我四处搜索,有很多选择。总结一下。就个人而言,我赞同这样一种观点,即如果在运行时添加方法,则不应该在编译时选择选择器,而应该在运行时选择选择器。因此,使用NSSelectorFromString等,以及一些不同的预处理器指令来抑制这种情况下的警告 希望这有帮助 使用
objc_msgSend( myObject, sel_getUid("yourMethod"), param1, param2...);
不要忘记导入“objc/message.h”这是一个XY问题。有关如何实现findAll功能,请参见RestKit。具体来说,NSManagedObject+ActiveRecord类别。
objc_msgSend( myObject, sel_getUid("yourMethod"), param1, param2...);