在previous question中,我提到一个 Core Data
类正在接收一条它不理解的消息(我相信它与 NSFetchedResultsController
有关),称为
-(int) sectionOffset
在试图找到错误的原因时,我试图找出哪个类是预期的接收者,但无济于事:文档甚至谷歌中都没有提及此消息。
作为最后的手段,我计划迭代所有 NSObject
的子类并询问(通过 instanceRespondsToSelector:
)它是否理解该消息。希望这能让我了解正在发生的事情 here .
那么,有没有办法迭代某个类的所有子类呢?有更好的方法吗?
最佳答案
我不确定这是否有助于解决您的根本问题,但以下代码会找到响应特定选择器的 NSObject 的所有子类:
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
unsigned int classCount = 0;
Class origin = [NSObject class];
NSMutableArray *allSubclasses = [NSMutableArray array];
Class *classes = objc_copyClassList(&classCount);
for (int i = 0; i < classCount; i++) {
Class superclass = classes[i];
do {
superclass = class_getSuperclass(superclass);
} while (superclass && superclass != origin);
if (superclass) {
[allSubclasses addObject: classes[i]];
}
}
free(classes);
for (id class in allSubclasses) {
// Put your selector here. I use "count" as an example
if ([class instancesRespondToSelector:@selector(count)]) {
NSLog(@"Class %@ responds to selector count.", NSStringFromClass(class));
}
}
NSLog(@"%lu Classes were tested.", (unsigned long)[allSubclasses count]);
}
return 0;
}
感谢访问this answer用于查找 NSObject 的所有子类。 另请查看this article on Cocoa with Love在 Objective-C 中查找特定类的所有子类。
关于objective-c - 查找哪个类响应特定消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29833077/