Слишком мало аргументов для вызова функции, ожидаемых как минимум 2, имеют 0 - PullRequest
0 голосов
/ 06 марта 2019

Я написал следующий код:

@interface TestClass : NSObject
//
-(void)testLog;
//
+(void)testLog;
@end
//===============================
SEL sel = @selector(testLog);
IMP imp = class_getMethodImplementation([TestClass class], sel);
imp();
//===============================
SEL testSel = @selector(testLog);
IMP testImp = class_getMethodImplementation(objc_getMetaClass(class_getName([TestClass class])), testSel);
testImp();

Too few arguments to function call, expected at least 2, have 0

Я установил Enable Strict Checking of objc_msgSend Calls на NO, но все еще имею эту ошибку 100

Enable Strict Checking of objc_msgSend Calls

Почему это неправильно?

1 Ответ

1 голос
/ 06 марта 2019

Все методы принимают как минимум два аргумента: ссылка на объект (или класс в случае метода класса), к которому вызывается метод, это значение self в теле метода;и селектор метода.Это то, чего не хватает в ваших звонках.

Вы можете увидеть это в определении IMP, приведенном в документации :

id (*IMP)(id, SEL, ...)

С объяснением:

Этот тип данных является указателем на начало функции, которая реализует метод.Эта функция использует стандартные соглашения о вызовах C, реализованные для текущей архитектуры ЦП.Первый аргумент - это указатель на себя (т. Е. Память для конкретного экземпляра этого класса или, для метода класса, указатель на метакласс).Второй аргумент - это селектор метода.Аргументы метода следующие.

HTH

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