Неполное определение типа "struct objc_method" - PullRequest
4 голосов
/ 30 сентября 2011

Я действительно запутался с этой проблемой.Что мне нужно сделать, это использовать некоторую функцию времени выполнения obj-c в моем проекте.Вот простой код в моем файле .m:

#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

Я получил следующую ошибку: неполное определение типа "struct objc_method".После некоторой проверки файла objc / runtime.h я нашел что-то вроде этого:

некоторый код ...

typedef struct objc_method *Method;

... некоторый код ...

struct objc_method {
    SEL method_name                                          OBJC2_UNAVAILABLE;
    char *method_types                                       OBJC2_UNAVAILABLE;
    IMP method_imp                                           OBJC2_UNAVAILABLE;
}

Это что-то вроде проблемы с предварительным объявлением или что-то еще?

Ответы [ 2 ]

7 голосов
/ 30 сентября 2011

В дополнение к ответу Мартина вы должны использовать такие функции, как method_getName для получения имени метода classMethods[i].

Это гораздо более переносимо (особенно эти поля в структуре больше не существуют, так какObjective-C 2.0, как предполагает макрос), и позволит избежать проблем, подобных той, которая возникла у вас во время разработки.

1 голос
/ 30 сентября 2011

К этим членам нельзя получить доступ! Макрос OBJC2_UNAVAILABLE указывает на то, что член недоступен, и только дает некоторое представление о структуре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...