objective-c - 查找哪个类响应特定消息

标签 objective-c cocoa core-data nsfetchedresultscontroller objective-c-runtime

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/

相关文章:

iphone - 从 NSManagedObject 引用磁盘上的文件

objective-c - insertNewObjectForEntityForName 返回 nil

objective-c - cocoa 问题 - NSTask 不起作用

cocoa - NSBrowser 重用单元而不是创建新单元

swift - 如何从 data core swift 4 中删除 tableview index.row

ios - 通过手势交换单元格的位置

ios - 使用另一个函数的完成 block

objective-c - 在 sqlite3 中传递列名而不是索引

ios - 在 iPhone 的 iOS 7 中打开相机时横向模式下的方向问题

macos - 如何删除 NSNotification Observer Xamarin