开发者

Incomplete definition of type "struct objc_method"

I'm really confused with this problem. What I need to do is use some obj-c runtime feature in my project. Here is simple code in my .m file:

#import "Base.h"
#import <objc/runtime.h>

@implementation Base
- (void)someMethod {
    NSUInteger numberMethods = 0;
    Method *classMethods = class_copyMethodList([self class], &numberMethods);
    for (int i = 0; i < numberMethods; i ++) {
        classMethods[i]->method_name; //incomplete definition of type "struct objc_method"
    }
@end

I got the following error: incomplete definition of type "struct objc_method". After some inspecting objc/runtime.h file I found something like this:

some code...

typedef struct objc_method *Method;

...some code...

struct objc_method {
    开发者_Python百科SEL method_name                                          OBJC2_UNAVAILABLE;
    char *method_types                                       OBJC2_UNAVAILABLE;
    IMP method_imp                                           OBJC2_UNAVAILABLE;
}

Is this something like forward declaration problem, or something else?


In addition to Martin answer, you should use functions like method_getName to retrieve the name of the method classMethods[i].

This is much more portable (especially these fields in the structure no longer exists since Objective-C 2.0 as the macro suggests) and will avoid problems like the one you have when the Runtime evolves.


These members cannot be accessed! OBJC2_UNAVAILABLE macro indicates that a member is not available and only provides some insight into the structure.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜