2015-06-19 3 views
3

Я пытаюсь запустить метод id method_invoke (id receiver, Method m, ...); из библиотеки времени выполнения Objective-C, но компилятор говорит, что я передаю слишком много аргументов, ожидая 0. Почему это возможно быть? (swizzledMethodOriginalImplementation имеет тип Method)Слишком много аргументов для вызова функции, ожидается 0 method_invoke

-(NSMenu*) blah2: (NSEvent*)anEvent :(NSRect) cellFrame :(NSView*) aView { 
    NSMenu *contextMenu = method_invoke(self, swizzledMethodOriginalImplementation, anEvent, cellFrame, aView); 
} 
+1

Обновите свой вопрос реальным кодом, предоставив вам неполадку. – rmaddy

+0

Хорошо. Код есть сейчас. – cinnamonraisin

ответ

1

Вы используете method_invoke неправильно. На самом деле никогда не нужно позвонитьmethod_invoke напрямую. Он не знает, какие аргументы ожидать. Именно поэтому его заявление, в документации, написано в совершенно открытой форме:

id method_invoke (id receiver, Method m, ...); 

нужно сначала литаяmethod_invoke функции к правильной функции типа указателя для рассматриваемого метода. Я не вижу, чтобы ты это делал.

+0

См., Например, http://stackoverflow.com/questions/19694173/using-objective-cs-invoke-method-to-call-a-void-method-under-arc. – matt